从其他表单更新文本框
本文关键字:文本 更新 表单 其他 | 更新日期: 2023-09-27 18:10:22
我用两种形式开发了一个Window应用程序:Form1
和Form2
。两个窗体都已显示在屏幕上。
我在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;
}