从另一个表单更新文本框

时间:2015-08-29 02:18:12

标签: c# winforms textbox

我开发了一个包含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中的{p> Form2更新Form2中的文本框值:

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

2 个答案:

答案 0 :(得分:0)

如果要为此更新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();
        }

我认为它会正常工作

答案 1 :(得分:0)

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