当父级打开模式对话框时,有没有办法自动隐藏始终在顶部的无模式对话框?
Posted
技术标签:
【中文标题】当父级打开模式对话框时,有没有办法自动隐藏始终在顶部的无模式对话框?【英文标题】:Is there a way to auto-hide a always-on-top modeless dialog when the parent opens a modal dialog? 【发布时间】:2009-09-07 09:23:08 【问题描述】:我的 C# Winforms 应用程序有一个始终在顶部的无模式查找对话框。由于用户可以在无模式查找对话框打开时访问父窗口,因此他们也可以选择打开模式对话框。由于无模式对话框始终位于顶部,它会遮挡模式对话框,但此时用户无法关闭无模式对话框,因为模式对话框将用户与所有其他窗口的交互锁定。
目前我正在通过手动添加代码以在打开任何模式窗口之前关闭无模式查找对话框来解决此问题,我想知道是否有更好的解决方案?
【问题讨论】:
【参考方案1】:在调用模式对话框之前让无模式对话框不总是在顶部,然后恢复它怎么样?
modeless.TopMost = false;
// show modal dialog here
modeless.TopMost = true;
【讨论】:
【参考方案2】:查找对话框是否需要始终位于顶部?如果目的只是让它漂浮在主窗体之上,将主窗体设置为查找对话框的父窗体是否足够?然后它会一直在前面,而不必总是在最前面。
否则,我会让查找对话框听取应用程序中发生的情况并采取相应措施。 (这可以通过多种方式解决,从事件到应用程序中所有表单的通用基本表单,再到在系统范围内侦听窗口激活/停用的 CBT-hook。)
【讨论】:
以上是关于当父级打开模式对话框时,有没有办法自动隐藏始终在顶部的无模式对话框?的主要内容,如果未能解决你的问题,请参考以下文章
当父级的大小减小时,哪些自动布局约束允许子视图压缩到 0 大小?
有没有办法通过向父级添加内联样式来隐藏父级 div/容器内的所有 div?