从外面改变表格的内容?

时间:2013-03-23 12:51:43

标签: c# winforms

我有一个名为MyForm的表单,我想在程序执行过程中从类本身外部编辑它的属性。

这是我得到的:

static void Main()
{
    MyForm main = new MyForm();
    main.ShowDialog();
    main.Text = "Hello";
}

但是,似乎ShowDialog()只是冻结程序,直到我关闭表单,因此在我关闭表单之前不会执行main.Text = "Hello";

我也尝试使用main.Show(),但只是在我执行Main()函数中的所有代码后关闭了表单,因此文本"Hello"只会快速闪烁。

我需要它以便我可以随时打开表单并在程序执行过程中从类本身外部更改它的控件。

我怎样才能做到这一点?我应该在不同的线程中运行表单吗?

2 个答案:

答案 0 :(得分:3)

这里有多个问题,您应该尝试一次关注一个问题,所以让我强调一下这些问题。

  1. 为什么我的程序会在Main退出时关闭?
  2. 如何在展示表单时避免“冻结”程序?
  3. 如何从其他地方访问表单的内容?
  4. 数目:

    1. 这就是程序生命周期的设计。当主线程(运行Main方法)终止时,程序关闭。任何打开的表单都会在此过程中关闭。解决方案是不允许Main退出,通常在您的情况下使用Application.Run(main);,显示表单并等待它关闭。
    2. 您使用Show而不是ShowDialog,但由于您没有其他表单保持程序打开,您的程序将关闭。显示表单后显示返回,返回到程序正在执行的任何操作。在你的情况下,该程序没有任何事情要做,所以它终止。
    3. 你需要在你的程序的其余部分可以访问它的地方存储对你的表单的引用,你可以在某处使用静态字段/属性,或者你可以将表单传递给需要它的各个部分。

答案 1 :(得分:1)

首先,我不知道你的具体情况是什么。也许我的解决方案对你有好处,但如果不是,请尝试告诉我们你想要达到的目标。

static void Main()
{
    var main = new MyForm();
    //Initialize a new thread with the `DoSomething()` method
    //and pass the form as a parameter
    var thread = new Thread(() => DoSomething(main)) {IsBackground = true};
    thread.Start();
    main.ShowDialog();
}

static void DoSomething(MyForm main) {
    //Update the form title
    main.Text = "Hello";
    //Wait one second
    Thread.Sleep(1000);
    //Update the form title again
    main.Text = "World";
}