在表单之间传递数据

时间:2011-01-03 20:13:40

标签: c# winforms

我有两种形式。首先,Form1有一个组框,一些标签和一个列表框。我按下一个按钮,新的Form2被打开并包含一些文字。我想将Form2中的文字转移到Form1

中的列表框

到目前为止,我所做的是将listbox的修饰符改为 public ,然后将此代码放在Form2

的按钮中
Form1 frm = new Form1();
frm.ListBox.items.Add(textBox.Text);

但令人惊讶的是,这并没有增加任何价值。我以为我错了插入所以我做了同样的程序。这一次,我公开了一个标签,并将文本框值添加到其Text属性,但它失败了。

有什么想法吗?

6 个答案:

答案 0 :(得分:15)

尝试将参数添加到第二个表单的构造函数(在您的示例中为Form1)并以该方式传递值。调用InitializeComponent()后,您可以将参数作为选项添加到列表框中。

public Form1(String customItem)
{
  InitializeComponent();
  this.myListBox.Items.Add(customItem);
}

// In the original form's code:
Form1 frm = new Form1(this.textBox.Text);

答案 1 :(得分:4)

下面的代码在我的机器上运行完美。

  private void button1_Click(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        f1.listBox1.Items.Add(textBox1.Text );//ListBox1 : Modifier property made public
        f1.ShowDialog();
    }

好的,如果您正在调用序列就像,Form1-&gt; Form2和Form2更新Form1的值,那么您必须使用ParentForm()或Delegate来更新以前的表单。< / p>

答案 2 :(得分:4)

我们假设Form1调用Form2。请查看代码:

Form1中:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();
        frm.Show();
        frm.VisibleChanged += formVisibleChanged;


    }

    private void formVisibleChanged(object sender, EventArgs e)
    {
        Form2 frm = (Form2)sender;
        if (!frm.Visible)
        {
            this.listBox1.Items.Add(frm.ReturnText);
            frm.Dispose();
        }


    }

}

窗体2:

 public partial class Form2 : Form
{

    public string ReturnText { get; set; }

    public Form2()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.ReturnText = this.textBox1.Text;
        this.Visible = false;

    }


}

答案是在Form2上声明公共属性以及何时隐藏表单。访问同一个实例并检索值。

答案 3 :(得分:3)

Form1 frm = new Form1();

frm现在是Form1类的新实例。

frm不会引用显示给用户的Form1的原始实例。

一种解决方案是,在创建Form2实例时,将其传递给您当前的Form1实例。

答案 4 :(得分:1)

请避免让任何像你这样的公众成员说的概念 &gt;&gt;我已经完成了将listbox的修饰符设置为public,然后在form2中的按钮代码&lt;&lt; 这不是一个好习惯,另一方面好的是布拉德克里斯蒂的帖子,我希望你能得到它。

答案 5 :(得分:0)

此代码可能位于包含myListBox的表单内,可能位于按钮单击处理程序中。

Form2 frm2 = new Form2();
frm2.ShowDialog();
this.myListBox.Items.Add(frm2.myTextBox.Text);
frm2.Dispose();