Windows窗体的问题

时间:2013-10-01 09:39:48

标签: c# winforms

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

3 个答案:

答案 0 :(得分:2)

致电

Application.Run(new Form1());

阻止您的应用程序,直到Form1关闭。因此,在您尝试关闭

之前,不会执行后续行

当然,如果您只想测试Instance调用的功能,请在Application.Run之后删除该行。相反,您需要创建一个单独的线程,尝试在Form1当前实例上调用该方法

答案 1 :(得分:0)

这样做,

首先将文本设置为文本框控件,然后设置Run()

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form = new Form1();
form.Controls["ChangeLabel1Text"].Text = "cool";
Application.Run(form);

答案 2 :(得分:0)

Application.Run(new Form1());方法调用执行在当前线程上运行标准应用程序消息循环。因此,当应用程序关闭时,将执行此行Instance.ChangeLabel1Text("cool");

为什么不在构造函数中更改标签的文本?不需要静态变量。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        ChangeLabel1Text("Hello!");
    }
}