C# 模态窗口,但仅适用于某些窗口

C# 模态窗口,但仅适用于某些窗口,c#,winforms,modal-dialog,C#,Winforms,Modal Dialog,我有一张表格。 此表单可以打开一个编辑器,该编辑器从表单扩展而来。 编辑器中有您单击的链接,这将打开一个模式表单来定义该链接 // Main form private void OnMainForm_MouseClick(object sender, MouseEventArgs e) { Editor editor = new Editor(); editor.Show(); } // editor private void OnEditorLink_MouseClick

我有一张表格。 此表单可以打开一个编辑器,该编辑器从表单扩展而来。 编辑器中有您单击的链接,这将打开一个模式表单来定义该链接

// Main form
private void OnMainForm_MouseClick(object sender, MouseEventArgs e)
{
    Editor editor = new Editor();
    editor.Show();
}



// editor
private void OnEditorLink_MouseClick(object sender, MouseEventArgs e)
{
    LinkConfigDialog linkDialog = new LinkConfigDialog();
    linkDialog.ShowModal();
}
这可确保用户无法单击并尝试修改已编辑的其他链接(或同一链接)。这是故意的

然而,现在我想让人们打开多个编辑器。我仍然希望模态表单能够工作,但只适用于那些编辑器,而不是整个应用程序


如何实现这一点?

我认为您应该在
编辑器中编写一个“冻结”编辑器对话框的方法。例如,通过禁用控件等。然后,您可以在打开
LinkDialog
时调用该方法。通过这种方式,您可以拥有多个仅由自己的
LinkDialog
s禁用的
Editor
实例。您可以使用另一种方法重新启用在关闭
LinkDialog
时将调用的控件。

为什么不临时隐藏调用者窗口,并在关闭对话框时,像以前一样使其再次可见?我从不隐藏来电窗口,我也不想+1是一个好主意。是的,一个bool,当窗口打开时进行标记,当bool在编辑器上为true时返回所有单击事件。不太理想,因为它不会抓住每一个案例,但有效!“它不会抓住每一个案例”是什么意思?如果有人添加了一个新的click事件来做某事,除非他们记得添加它,否则该检查将不会出现。您可以在
编辑器中创建一个公共方法来禁用它(无论您喜欢哪种方式)。您可以在
链接对话框
的构造函数中获取一个
编辑器
实例,它可以获取该
编辑器
实例并调用disable方法,当关闭
链接对话框
时,它可以调用另一个启用
编辑器对话框
的公共方法。我不明白在这种特殊情况下你需要这些活动做什么。