【问题标题】:Form usable even when a modal dialog is above [duplicate]即使模式对话框高于[重复],表格也可用
【发布时间】:2010-03-23 08:38:01
【问题描述】:

我有一个对话框 A,我希望它加载第二个对话框 B,该对话框是无模式的,并且始终保持在 A 侧。然后对话框 A 可能会启动一个模态对话框 C。但是当 C 存在时,我希望 B 可用。我会在 C++ 应用程序中使用 A 中的预翻译消息解决此问题,但 C# 中的方法是什么。

【问题讨论】:

    标签: c# windows modal-dialog modeless dialog


    【解决方案1】:

    当您启动对话框 C 时,使用 yourFormVariable.Show() 而不是 yourFormVariable.ShowDialog() 启动它。

    Form form1 = new Form();
    Form form2 = new Form();
    form1.Show();
    form2.Show();
    

    这将允许用户激活和使用两种表单,而在以下代码中:

    Form form1 = new Form();
    Form form2 = new Form();
    form1.Show();
    form2.ShowDialog();
    

    用户必须关闭 form2 才能再次继续使用 form1。

    请注意,没有模式对话框之类的东西可以让以前的表单可用 - 根据定义,modal dialog 是用户在继续之前必须与之交互并关闭的对话框。

    【讨论】:

    • 我知道使 C 无模式会起作用,但我需要另一个对话框来响应,它可能包含帮助用户使用对话框 C 的文本。实际上,如果我想要一个自定义帮助系统那是一个伙伴窗口,我如何让用户使用它。我知道 Windows 使用单独的进程来启动帮助和那些向导,但我相信在同一个进程中实现这一点应该没有技术障碍 - 也许通过更改所有权/父级的 Window 层次结构。
    • 所以您希望当用户打开对话框 C 时对话框 A 没有响应,但您仍然希望他们能够与对话框 B 交互?正如我所说,模态对话框将阻止与应用程序的所有交互,直到该模态对话框关闭。您可以这样做的唯一方法是使用 Show() 打开 Dialog C,然后在 Dialog C 打开时更改 Dialog A 的 Enabled 属性(因此它禁用所有控件),然后在 Dialog C 关闭时将其更改回 Enabled。跨度>
    • 嗯,小问题 - 当对话框 C 无模式时,当与 B 交互时它可能会丢失 - 最好的选择是在任务栏中显示 C,这似乎不适合应该是模态对话框。
    • stackoverflow.com/questions/1388408/… 这建议使用钩子,但解决方案不清楚
    • “这似乎不适合应该是模态对话框” - 我不同意。我见过模态对话框小于其后面的非活动对话框的应用程序,因此如果单击该对话框,您会“丢失”模态对话框。如果您没有任务栏按钮,则返回模式窗口的唯一方法是 ALT+TAB - 这对我来说不正确。任务栏是我查找应用窗口的第一个位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2020-02-12
    • 2015-03-30
    相关资源
    最近更新 更多