我有两种形式。首先,Form1
有一个组框,一些标签和一个列表框。我按下一个按钮,新的Form2
被打开并包含一些文字。我想将Form2
中的文字转移到Form1
。
到目前为止,我所做的是将listbox的修饰符改为 public ,然后将此代码放在Form2
Form1 frm = new Form1();
frm.ListBox.items.Add(textBox.Text);
但令人惊讶的是,这并没有增加任何价值。我以为我错了插入所以我做了同样的程序。这一次,我公开了一个标签,并将文本框值添加到其Text
属性,但它失败了。
有什么想法吗?
答案 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();