Windows 窗体的问题
本文关键字:问题 窗体 Windows | 更新日期: 2023-09-27 18:33:23
我有以下 C# 代码:
using System;
using System.Windows.Forms;
namespace WinFormErrorExample
{
public partial class Form1 : Form
{
public static Form1 Instance;
public Form1()
{
Instance = this;
InitializeComponent();
}
public void ChangeLabel1Text(String msg)
{
if (InvokeRequired)
Invoke(new Action<String>(m => label1.Text = m), new object[] {msg});
else
label1.Text = msg;
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Instance.ChangeLabel1Text("cool");
}
}
}
}
当我调用Instance.ChangeLabel1Text("cool");
时,GUI 中没有任何反应。
这是我构建的一个小程序,用于在较大的程序中显示我的问题。
为什么 GUI 没有更新?
对
Application.Run(new Form1());
阻止您的应用程序,直到 Form1 关闭。因此,在您尝试关闭之前,您的后续行不会执行
当然,如果您只想测试实例调用的功能,请在 Application.Run 之后删除该行。相反,您需要创建一个单独的线程,该线程尝试在 Form1 当前实例上调用该方法
Application.Run(new Form1());
方法调用在当前线程上运行标准应用程序消息循环。因此,此行Instance.ChangeLabel1Text("cool");
将在应用程序关闭时执行。
为什么不更改构造函数中的标签文本?无需静态变量。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ChangeLabel1Text("Hello!");
}
}
这样就可以了,
首先将文本设置为文本框控件,然后Run()
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form = new Form1();
form.Controls["ChangeLabel1Text"].Text = "cool";
Application.Run(form);