5

我有两种形式。

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

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

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

5 回答 5

3

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

private bool Ready = false;

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

public bool isReady()
{
    return Ready;
}
于 2013-08-01T12:14:15.507 回答
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;
            }

你也可以看看这个

当我的表单在 C#(.Net Compact Framework)中完全加载时通知?

于 2013-08-01T12:14:19.290 回答
1

所以你需要使用 formsShown事件:

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

但是你会遇到另一个问题。它会阻塞线程。您需要while利用 aBackgroundWorker或来在另一个线程上运行此循环Thread

于 2013-08-01T12:13:10.543 回答
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!
}
于 2013-08-01T12:14:57.310 回答
0

您可以使用 Form.IsActive 属性。

要不就;

public bool IsFormLoaded;

public MyForm()
    {
        InitializeComponent();
        Load += new System.EventHandler(FormLoaded);
    }
private void FormLoaded(object sender, EventArgs e)
    {
        IsFormLoaded = true;
    }

并检查 YourForm.IsFormLoaded 是真还是假

于 2022-01-21T10:57:59.870 回答