我有两种形式。
。 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(..)
{
...
}
答案 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(..)
{
}
}
但是你会遇到另一个问题。它会阻止线程。您需要利用while
或BackgroundWorker
在另一个主题上运行此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!
}