我开发了一个包含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
中的{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);
}
}
答案 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;
}