从另一个表单更新文本框

Update Textbox from another form

我开发了一个 Window 应用程序,其中包含 2 个表单:Form1Form2。两种形式都已显示在屏幕上。

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

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

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

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

updateSMOStatus in Form2 更新 Form2 中的文本框值:

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

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

和我的 Program class:

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 的值,则需要进行两处更改。 第一个是 Close your current form2

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;
}