C#从另一个表单自动更改按钮文本

时间:2016-01-14 15:01:59

标签: c# forms button text

我正在创建一个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;
}

提前致谢.....

2 个答案:

答案 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.