检查表单是否已加载

时间:2013-08-01 12:11:06

标签: c# .net winforms

我有两种形式。

  • 其中一个是主要形式(我们称之为MainForm)
  • 另一个用于显示一些警告(让我们称之为dialogForm)

。 dialogForm中有一个标签。当我单击MainForm中的按钮时,dialogForm将打开。  但dialogForm中的标签是空白的。它没有时间实际加载。我想检查dialogForm是否已满载,然后proccess可以在MainForm中继续。  例如:

dialogForm tempFrm = new dialogForm();
tempFrm.Show(); // I want to wait till the dialogForm is fully loaded. Then continue to "while" loop.
while(..)
{
...
}

4 个答案:

答案 0 :(得分:2)

您可以尝试以下

private bool Is_Form_Loaded_Already(string FormName)
            {
                foreach (Form form_loaded in Application.OpenForms)
                {
                    if (form_loaded.Text.IndexOf(FormName) >= 0)
                    {
                        return true;
                    }
                }
                return false;
            }

你也可以看看这个

Notification when my form is fully loaded in C# (.Net Compact Framework)?

答案 1 :(得分:1)

因此您需要使用表单Shown事件:

tempFrm.Shown += (s, e) =>
{
    while(..)
    {
    }
}

但是你会遇到另一个问题。它会阻止线程。您需要利用whileBackgroundWorker在另一个主题上运行此Thread循环。

答案 2 :(得分:0)

为什么不创建一个布尔值,以及一个访问它的方法..

private bool Ready = false;

public ConstructorMethod()
{
    // Constructor code etc.
    Ready = true;
}

public bool isReady()
{
    return Ready;
}

答案 3 :(得分:0)

你的while(...)会阻止UI线程,因此子表单永远不会收到消息,也不会被加载。

要实现目标,您应该订阅Load事件并在处理程序中继续执行代码。

void Click()
{
    var tempFrm = new dialogForm();
    tempFrm.Load += frmLoad;
    tempFrm.Show();
}

void frmLoad(object s, EventArgs ea)
{
   // form loaded continue your code here!
}