c# - 等待MDI子进程关闭,类似于ShowDialog()

标签 c# modal-dialog mdi showdialog mdichild

我有一个 MDI 应用程序,我想在其中使用模式对话框...是的,我知道这有点违反 MDI 的原则...无论如何,我的主窗口更像是一个“工作空间”然后是其他任何东西。

回到主题,如何等待 MDI-Child 关闭?一些示例代码:

  public void DoSomething() {
    String searchterm = this.TextBox1.Text;
    MyItem result = MySearchForm.GetItem(searchterm);

    if(MyItem != MyItem.Empty) {
        // do something
    }
  }

MySearchForm是主窗口的MDI子级,所以我不能使用ShowDialog(),但我仍然想使用阻塞方法来等待窗口关闭并返回结果。我考虑过在另一个线程上调用它并等待该线程退出,但这也不适用于 MDI。

有人有想法吗?

最佳答案

在 MDI 应用程序中使用对话框是很正常的,它并不违反 MDI 约定。只是不要将其设为 MDI 子窗口。这很糟糕,因为你无法使其成为模态。如果您将其设置为非模态,那么当用户最小化窗口时会发生令人困惑的事情。

只需使用 ShowDialog(owner) 或 Show(owner) 方法(分别为模式和非模式)并将 MDI 父级作为所有者传递。该对话框将始终位于子窗口的顶部。您通常确实需要 StartPosition = Manual 并设置 Location,以便确保它在父框架内的适当位置启动。

关于c# - 等待MDI子进程关闭,类似于ShowDialog(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3131618/

相关文章:

c# - 如何正确地将 unsigned char* 从 c dll 编码(marshal)至 c#

c# - 通过nuget包添加代码分析规则集

c# - 使用 ALL 的 LINQ 查询

c# - double 到 datetime 的转换总是失败

angularjs - AngularUI 模态可拖动且可调整大小

delphi - 表格自动显示而无需我告诉他们?

javascript - jquery .not() 用于关闭菜单(或模式)不起作用

python - 如何在继续使用 tkinter 之前等待模式窗口的响应?

.net - MDI窗体 'creep'(MDI窗口位置变化)

.net - 在 .NET 中创建新的最大化 MDI 子窗体的图标问题