我有两种形式.首先,Form1有一个组框,一些标签和一个列表框.我按下一个按钮,Form2打开新的并包含一些文字.我想将文本传输Form2到列表框中Form1.
到目前为止,我所做的是将listbox的修饰符设置为public,然后将此代码放在按钮中Form2
Form1 frm = new Form1();
frm.ListBox.items.Add(textBox.Text);
Run Code Online (Sandbox Code Playgroud)
但令人惊讶的是,这并没有增加任何价值.我以为我错了插入所以我做了同样的程序.这一次,我公开了一个标签,并在其Text属性中添加了文本框值,但它失败了.
有任何想法吗?
Bra*_*tie 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);
Run Code Online (Sandbox Code Playgroud)
下面的代码在我的机器上完美运行。
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();
}
Run Code Online (Sandbox Code Playgroud)
好的,如果你在调用 Sequence 就像 Form1->Form2 和 Form2 更新 Form1 的值,那么你必须使用ParentForm () 或Delegate来更新以前的表单。
小智 6
让我们假设 Form1 调用 Form2。请看代码:
表格1:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
表格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;
}
}
Run Code Online (Sandbox Code Playgroud)
答案是在 Form2 上声明公共属性以及何时隐藏表单。访问同一个实例并检索值。
Form1 frm = new Form1();
Run Code Online (Sandbox Code Playgroud)
frm 现在是 Form1 类的新实例。
frm 并不引用向用户显示的 Form1 的原始实例。
一种解决方案是,在创建 Form2 的实例时,向其传递对当前 Form1 实例的引用。