我正在创建一个Windows应用程序。在表单上,我有3个按钮,用户可以从设置菜单进行配置。我创建了一个第二个表单作为弹出窗口,用户可以为每个按钮添加相关信息。当他们点击"完成"在此弹出窗体上,我想更新窗体1上的按钮文本。
public string ButtonVNC1Text
{
get
{
return btn1VNC.Text;
}
set
{
this.btn1VNC.Text = value;
}
}
然后在表单2上按下完成按钮时,我有以下代码。
private void btn1VNCSetup_Click(object sender, EventArgs e)
{
//Collect Entered Data
VNCVars.VNC1Description = txtVNC1Des.Text;
//Update Button Text
BespakHMI main = new BespakHMI();
main.ButtonVNC1Text = txtVNC1Des.Text;
//Save the Data that has been entered into the Setup Fields for VNC1/2/3
SaveXML.SaveData();
this.Close(); // closes the Form2 instance.
}
但是当表格2关闭时,文本还没有更新。如果我在表单1上添加一个按钮并执行以下操作,则文本确实会发生变化。
private void button1_Click(object sender, EventArgs e)
{
ButtonVNC1Text = VNCVars.VNC1Description;
}
提前致谢.....
答案 0 :(得分:1)
下面
// Update Button Text
BespakHMI main = new BespakHMI();
main.ButtonVNC1Text = txtVNC1Des.Text;
您没有更新现有 BespakHMI
表单,而是新不可见实例。
解决的一种方法是查找现有表单,如
var main = Application.OpenForms.OfType<BespakHMI>().FirstOrDefault();
if (main != null)
{
main.ButtonVNC1Text = txtVNC1Des.Text;
// ...
}
答案 1 :(得分:0)
尝试在表单2的构造函数中传递form1
第1步: 而不是
Form2 form2 = new Form2();
使用
Form2 form2 = new Form2(this);//You give to form2 the 'address' of form1 by using 'this'
第二步:
在Form2中写下以下内容:
Form1 creator = null;
public Form2(Form1 form1)
{
creator = form1;//the 'this aka address of form1' is saved in the creator variable
}
第3步: 使用
creator.btn1VNC.Text = "hello there";// sets btn1VNC in the original form to "hello there" in form 2, using the address of form 2.