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 没有更新?

Windows 窗体的问题

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