在表单之间传递数据
我有两种forms。 首先, Form1
有一个组框,一些标签和一个列表框。 我按下一个button,打开新的Form2
并包含一些文本。 我想将Form2
的文本转移到Form1
的列表框中。
到目前为止,我所做的就是将listbox的修饰符公开 ,然后将这些代码放在Form2
的button中
Form1 frm = new Form1(); frm.ListBox.items.Add(textBox.Text);
但令人惊讶的是,这并没有增加任何价值。 我以为我错误的插入,所以我做了相同的程序。 这一次,我公开了一个标签,并将TextBox的值添加到了它的Text
属性中,但是失败了。
有任何想法吗?
Form1 frm = new Form1();
frm现在是类Form1的新实例。
frm不引用向用户显示的Form1的原始实例。
一个解决scheme是,当创buildForm2的实例时,将它传递给您当前的Form1实例的引用。
尝试将一个参数添加到第二个窗体的构造函数(在您的示例Form1中)并传递该值。 一旦调用了InitializeComponent(),就可以将该参数添加到列表框中作为select。
public Form1(String customItem) { InitializeComponent(); this.myListBox.Items.Add(customItem); } // In the original form's code: Form1 frm = new Form1(this.textBox.Text);
下面的代码工作在我的机器上完美。
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-> Form2和Form2更新Form1的值,那么你必须使用ParentForm ()或Delegate来更新以前的表单。
我们假设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上声明公共属性,当窗体被隐藏。 访问相同的实例并检索值。
请避免像你说的任何公共成员的概念>>我已经做的是使列表框的修改器公开,然后在form2中的button代码<<这不是一个好的做法,另一方面好的是在布拉德佳士得邮政,我希望你明白了。
这个代码将在包含myListBox的表单里面,可能在一个button点击处理程序中。
Form2 frm2 = new Form2(); frm2.ShowDialog(); this.myListBox.Items.Add(frm2.myTextBox.Text); frm2.Dispose();