【发布时间】:2012-01-29 23:03:05
【问题描述】:
我怎样才能在 WinForms 中创建一个“弹出”窗口?
由于我使用了我自己编造的词“popup”,让我举一个所谓的“popup”窗口的例子:
-
工具提示窗口(可以延伸到其父窗体的边界之外,不出现在任务栏中,不是模态的,也不会窃取焦点):
-
一个弹出菜单窗口(可以延伸到其父窗体的边界之外,不出现在任务栏中,不是模态的,并且不窃取焦点):
-
下拉式窗口(可以延伸到其父窗体的边界之外,不会出现在任务栏中,不是模态的,并且不会窃取焦点):
-
主菜单窗口(可以延伸到其父窗体的边界之外,不出现在任务栏中,不是模态的,也不会窃取焦点):
更新 popup 窗口在使用鼠标或键盘进行交互时不会使自己成为the "active" window(“所有者”窗口仍然是活动窗口):
我在这个神秘的“弹出窗口”中寻找的属性是:
- 可以扩展超出其父窗体的边界(即is not a child window)
- 未出现在任务栏中(即 Window 对应出现哪些窗口的启发式方法未启动,也没有 WS_EX_APPWINDOW 扩展窗口样式)
- 不是模态(即doesn't disable its "owner")
- 不偷专注
- 始终在其“所有者”之上
- 与之交互时不会成为“活动”窗口(所有者保持活动状态)
Windows 应用程序已经在设法创建此类窗口。如何在 WinForms 应用程序中执行此操作?
相关问题
- 如何在本机代码中实现以上所有功能?
- 如何在 Delphi 中创建弹出窗口?
- 我有这个本机代码来显示“弹出”窗口 - 在 .NET 中执行相同操作需要哪些 P/Invokes?
- 我在 .NET 中有一组 P/Invoke - 我可以重用常规 WinForm,覆盖某些方法,以达到相同的效果吗?
- 我有 WinForm,我通过覆盖某些方法将其显示为“弹出窗口” - 是否有内置的
Control可以充当我的弹出窗口? - How to simulate a drop-down window in WinForms?
尝试#1
我试过Show(onwer) + ShowWithoutActivation方法:
PopupForm dd = new PopupForm ();
dd.Show(this);
使用 PopupForm:
public class PopupForm: Form
{
public PopupForm()
{
InitilizeComponent();
}
private void InitilizeComponent()
{
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.WindowState = FormWindowState.Normal;
this.ShowInTaskbar = false;
}
protected override bool ShowWithoutActivation
{ get { return true; } }
}
几乎解决了这个问题,但后来我发现被提醒“弹出”窗口的另一个属性:它们不会从它们的“所有者”表单中获取焦点变成与鼠标或键盘交互时激活。
【问题讨论】:
-
您希望这一切都是一个“弹出”或多个“弹出”方法?
-
@Moonlight 无论内容是什么,概念都应该相同。一旦我有了一个“弹出表单”,我就可以在里面放任何我想要的内容。
-
我很难看出这和yesterday's question 之间的区别。我的回答将适用于您正在尝试做的事情。
-
@LarsTech 通过询问有关“下拉菜单”的问题,我将我的答案限制在“下拉菜单”。我想要一个具有更广泛适用性的问题(和答案)。这个问题的答案解决了“下拉”问题 - 但反之亦然。最后,我想问一个关于“弹出窗口”的问题,这样任何搜索“弹出窗口”的人都会找到这个,而不仅限于“下拉菜单”。
标签: winforms winapi popup popupwindow