将粘贴从一个表单复制到另一个表单c#

时间:2013-01-23 08:34:58

标签: c#

我想做什么:

  1. 通过Form1表单上的BarCode搜索产品;
  2. 如果找不到:
        1.打开Inventory表单     2.按名称或说明搜索产品
        3.在找到的产品副本ListView click上,将其BarCode粘贴到Form1条形码文本框中。
  3. 所有这一切都是完成的。问题是每次我从Inventory添加产品时,都会打开 new 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 未从库存表单中获取测试的值

1 个答案:

答案 0 :(得分: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正在使用您的属性getter,以获取需要设置为label9.Text的值。 =符号表示您打算对此属性使用setter,并将value的值设置为label9.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方法更改为以下内容,以允许在其他地方设置此测试变量。

set{text = value;}