首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Windows窗体中一键完成两件事

如何在Windows窗体中一键完成两件事
EN

Stack Overflow用户
提问于 2008-12-13 20:14:46
回答 3查看 1.5K关注 0票数 0

在我的主窗体上,有另一个(可浮动的)窗口。这个浮动窗口的工作原理有点像弹出窗口,因为当用户单击此窗口之外的其他地方时,它将关闭。这是由停用事件处理的。但是我想要做的是,如果用户点击一个不同的控件(比如一个按钮),我想关闭这个浮动窗口,然后只需点击一下就可以激活那个按钮。目前,用户必须单击两次(一次用于停用窗口,另一次用于激活所需的按钮)。有没有办法只需一次点击就能做到这一点?

EN

回答 3

Stack Overflow用户

发布于 2008-12-13 20:36:55

代码语言:javascript
运行
复制
foreach(Control c in parentForm.Controls)
{
   c.Click += delegate(object sender, EventArgs e)
              {
                  if(floatyWindow != null && floatyWindow.IsFloating)
                  {
                       floatyWindow.Close();
                  }
              };
}

然后像往常一样添加处理程序。这个额外的处理程序可以关闭浮动窗口。确保你的浮动窗口也不是一个对话框,因为这不会允许你的父窗体的控件被点击。

票数 2
EN

Stack Overflow用户

发布于 2008-12-13 20:34:53

我有一个略显老套的解决方案。在停用事件中,向主窗体激发另一个自定义事件。然后,当您的主窗体处理自定义事件时,枚举您的控件(this.Controls),并通过检查它们的所有绑定来定位鼠标下的控件,然后调用Focus()。您可能需要按具有最小表面积的控件进行排序,或者您可以有一个单独的“可聚焦”控件列表,如按钮。

另一种方法可能是在可浮动窗口的OnMouseLeave或主窗口的OnMouseHover之后立即将焦点切换到主窗体,但将可浮动窗口保持在顶部,只是没有焦点。控制主窗体的全局鼠标按下,然后关闭可浮动窗口。

这些只是理论,没有经过验证。

票数 0
EN

Stack Overflow用户

发布于 2008-12-13 21:38:05

我也遇到过这样的问题,当一个客户想要到处都是“浮动”窗口的应用程序时。我使用的方法与本文中描述的方法类似:

http://www.vbaccelerator.com/home/NET/Code/Controls/Popup_Windows/Popup_Windows/article.asp

代码示例可在此处获得:

http://www.vbaccelerator.com/home/NET/Code/Controls/Popup_Windows/Popup_Windows/Popup_Form_Demonstration.asp

通过扩展这一点,我们创建了“浮动”窗口,类似于VS在调试代码时遇到运行时错误时所使用的窗口。

至少,阅读代码可能会给你一些洞察力,然而,quarrelsome的响应可能是更简单的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/365657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档