从其他表单更新文本框

本文关键字:文本 更新 表单 其他 | 更新日期: 2023-09-27 18:10:22

我用两种形式开发了一个Window应用程序:Form1Form2。两个窗体都已显示在屏幕上。

我在Form2中有一个按钮,调用Form1中的一个函数,如:

private void btnGetStation_Click(object sender, EventArgs e)
{
    Program.form.showConnectionStatus();
}

Form1中的showConnectionStatus函数将调用Form2中的函数来更新Textboxes中的信息。configElement是一个包含4个元素的字符串数组:

public void showConnectionStatus()
{
    Program.form2.updateSMOStatus(configElement[0], configElement[1], configElement[2] + "," + configElement[3]);
}

Form2中的updateSMOStatus更新Form2:中的Textboxs值

public void updateSMOStatus(string line, string group, string stationType)
{
      txtLineName.Text = line;
      txtGroupName.Text = group;
      txtStationType.Text = stationType;
}

我进行了调试,发现所有textbox值都发生了变化,但没有显示。我的问题是为什么Form2上没有显示值?

和我的Program类:

static class Program
{
     public static Terminal form;
     public static Form2 form2;
     /// <summary>
     /// The main entry point for the application.
     /// </summary>
     [STAThread]
     static void Main()
     {
          Application.EnableVisualStyles();
          Application.SetCompatibleTextRenderingDefault(false);
          form = new Terminal();
          form2 = new Form2();
          Application.Run(form);
      }
}

从其他表单更新文本框

如果您想为此更新Form2的值,您需要两个更改。第一个是关闭您当前的表单2

private void btnGetStation_Click(object sender, EventArgs e)
{
    Program.form.showConnectionStatus();
    this.Close();
}`

现在在form1中,对showConnectionStatus((方法进行一些更改

 public void showConnectionStatus()
        {

            Program.form2.updateSMOStatus(configElement[0], configElement[1], configElement[2] + "," + configElement[3]);
            Program.form2.Show();
        }

我认为它会很好地工作

通过使用delegate,我解决了这个问题:

Form1添加:

public delegate void UpdateSMOStatus(string line, string group, string stationType);
public UpdateSMOStatus updateSMOStatus;

showConnectionStatus功能更改为:

public void showConnectionStatus()
{
    updateSMOStatus(configElement[0], configElement[1], configElement[2] + "," + configElement[3]);
}

Form2函数看起来像:

private void btnGetStation_Click(object sender, EventArgs e)
{
     Program.form.updateSMOStatus = new Terminal.UpdateSMOStatus(updateSMOStatus);
     Program.form.showConnectionStatus();
}
public void updateSMOStatus(string line, string group, string stationType)
{
      txtLineName.Text = line;
      txtGroupName.Text = group;
      txtStationType.Text = stationType;
}