0

我想做什么:

  1. 通过表格上的条码搜索产品Form1
  2. 如果找不到:
    1. 打开Inventory表格 2. 按名称或描述搜索产品
    3. 在ListView click找到的产品上复制其条形码并将其粘贴到Form1条形码文本框中。

所有这些都是正确完成的。问题是每次我从Inventory表单添加产品时都会打开一个新产品。 Form1

这些值未在同一处处理Form1,因此假设我销售 4 种产品:

  • 其中2个是通过Form1条码搜索添加的
  • 其中2个是通过Inventory搜索表单添加的

最后我得到了 3 个打开Form1的表格,一个有 2 个产品,两个有单个产品的表格(通过Inventory表格添加)。我需要它们合而为一。

谢谢

//-------------------------Form1---------- ----------------------

private void btnInventory_Click(object sender, EventArgs e)

    {
        Inventory Inventory = new Inventory();
        Inventory.Show();
    }



 private string _theValue;

    public string TheValue
    {
        get
        {
            return _theValue;
        }
        set
        {
            _theValue = value;
            txtItems.Text = value;

        }
    }

// - - - - - - - - - - - - - - -存货 - - - - - - - - - ---------------

private void ShowForm1()
    {

        string value = label9.Text;
        Form1 newForm = new Form1();
        newForm.TheValue = value;
        this.Close();
        newForm.ShowDialog();
    }



private void lvList_Click(object sender, EventArgs e)

    {
        label9.Text = lvList.SelectedItems[0].SubItems[0].Text;
        this.ShowForm1();

    }

抱歉耽搁了,我不得不等 8 小时才再次发帖

谢谢你的回复。

我刚试过 Form1

  private void btnInventory_Click(object sender, EventArgs e)
     {

         Inventory _inv = new Inventory();
         if (DialogResult.OK == _inv.ShowDialog())
             {
                 txtItems.Text = _inv.fugi;
             }

     }

并以库存形式

private string test;
        public string fugi
        {
            get { return test; }
            set { test = label9.Text; }
        }



private void lvList_Click(object sender, EventArgs e)
        {

            label9.Text = lvList.SelectedItems[0].SubItems[0].Text;
            this.DialogResult = DialogResult.OK;
            this.Close();


        }

txtItems.Text没有从库存表单中获取test的值

4

1 回答 1

1

它打开一个新对话框,因为你告诉它在ShowForm1,我个人会改变你的 btnInventory 点击如下

private void btnInventory_Click(object sender, EventArgs e)
{
    Inventory _inv = new Inventory();
    if(DialogResult.OK == Inventory.ShowDialog())
    {
          valueIWantToSet = _inv.Accessor;
    }
}

访问器,您需要使自己类似于

public TypeOfVar Accessor
{
    get{return m_privateVariableThatIWillMakeAndSetToMyBarcode;}
}

编辑:一旦你得到你的条形码值,你需要设置DialogResult如下

 this.DialogResult = DialogResult.OK;

然后在关闭表单之前设置您希望访问条形码的变量

Edit2:您的ShowForm1最终结果与此类似(可能要重命名此方法!)

{
this.DialogResult = DialogResult.OK;
m_myVar = SelectedItem..;
this.Close;
}

更新答案

您仍然遇到问题,因为您没有set正确使用该属性,您的获取是正常的。c# 中有一个关键字称为value,应该用于设置器。该值将采用 = 符号右侧的任何值..您可以这样想...

fugi = label9.Text

在上面的行中,fugi使用您的属性获取器来获取需要设置为的值label9.Text。该=标志表示您打算使用该属性的设置器并将值设置valuelabel9.Text

使用带有 getter 和 setter 的属性,因此您不必提供对底层变量的访问到您不想访问的地方,然后可以选择根据需要设置或获取此变量。

这意味着您的问题仍然存在,您尚未设置 的值test,它仍然是默认字符串值。所以你有几种方法可以解决你的问题。

第一种方法只是为 label9.Text 提供一个 getter 并消除对私有变量的需要。

public string Fugi //Properties should really start with capital letter
{
    get{return label9.Text;}
}

第二种是在 btnInventoryClick 中调用 getter 之前设置 test 的值并删除 setter 方法

private void lvList_Click(object sender, EventArgs e)
{
   test = label9.Text;

第三个test是按照方法2所示设置,但也将Fugi的设置方法更改为以下,以允许在其他地方设置此测试变量。

set{text = value;}

于 2013-01-23T08:44:29.750 回答