从另一个表单更新文本框
Update Textbox from another form
我开发了一个 Window 应用程序,其中包含 2 个表单:Form1
和 Form2
。两种形式都已显示在屏幕上。
我在 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;
}
我开发了一个 Window 应用程序,其中包含 2 个表单:Form1
和 Form2
。两种形式都已显示在屏幕上。
我在 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;
}