在我的主窗体上,还有另一个(可浮动的)窗口。这个可浮动窗口的工作方式类似于一个popupwindow,因为当用户单击此窗口之外的其他位置时它将关闭。这由Deactivate事件处理。但是我想要做的是,如果用户点击不同的控件(比如按钮),我想同时关闭这个浮动窗口,然后只需点击一下就可以激活该按钮。目前,用户必须点击两次(一次关闭窗口,再次激活所需的按钮)。只需点击一下就可以做到这一点吗?如何在Windows窗体中单击一下即可完成两件事
回答
我有一个稍微hacky的解决方案。在您的停用事件中,将另一个自定义事件触发到主窗体。然后,当你的主窗体处理自定义事件时,通过你的控件枚举(this.Controls)并通过检查所有的绑定找到鼠标下的控件,然后调用Focus()。您可能需要按最小表面积进行排序,或者您可以为此目的单独列出“可调焦”控件(如按钮)。
另一种方法可能是在可浮动窗口的OnMouseLeave或主窗口的OnMouseHover之后立即将焦点切换到主窗体,但将可浮动窗口保持在最上方,只是没有焦点。处理主窗体的全局鼠标,然后关闭可浮动窗口。
这些只是理论,没有经过测试。
foreach(Control c in parentForm.Controls)
{
c.Click += delegate(object sender, EventArgs e)
{
if(floatyWindow != null && floatyWindow.IsFloating)
{
floatyWindow.Close();
}
};
}
然后像往常一样添加处理程序。这个额外的处理程序可以关闭浮动窗口。 确保你的浮动窗口不是一个对话框,因为这不会让你的父窗体的控件被点击。
我有一个这样的问题,当一个客户想要“浮动”的窗口在那里的应用程序。我用用类似于本文中描述的一种方法:
http://www.vbaccelerator.com/home/NET/Code/Controls/Popup_Windows/Popup_Windows/article.asp
代码示例可在这里:
通过扩展一点,我们创建了类似“轻飘”窗口VS在调试代码时遇到运行时错误时使用。
至少阅读代码可能会给你一些见解,然而,争吵的反应可能是更简单的解决方案。
http://tinyurl.com – 2008-12-13 22:43:31
- 1. 在windows窗体中单击按钮时引发一个事件
- 2. 在Windows窗体中捕获复选框单击事件DataGridview
- 3. 单击一下即可在JSP页面上单击文件
- 4. 检查Windows窗体完成
- 5. Windows窗体,WPF鼠标点击事件
- 6. 空载完成事件的窗体
- 7. Windows窗体单击事件重复自己
- 8. C#将窗体带到Windows 7 ThumbnailToolBarButton的单击事件
- 9. 添加单击事件自动完成
- 10. 取消Windows窗体事件
- 11. Windows窗体事件日志
- 12. Windows窗体事件消失
- 13. Windows窗体的CompositionTarget.Rendering事件?
- 14. Powershell Windows窗体onClick事件
- 15. 窗体在Windows窗体中移动事件
- 16. 谁在Windows窗体程序中调用窗体加载事件?
- 17. 如何使windows窗体在c#中完成的Windows应用程序前来?
- 18. Windows窗体窗体类中的属性仅在Load事件后可访问
- 19. 在整个html主体上完成全局单击事件中的元素
- 20. 如何在静态上下文中隐藏Windows窗体表单?
- 21. Xamarin DataPicker如何处理完成的按钮单击事件
- 22. 如何在VB中拦截Windows窗体的Exit事件?
- 23. 如何处理Windows窗体在C#中获得焦点事件?
- 24. 如何在Windows窗体中捕获滚动事件PropertyGrid
- 25. 在AVPlayerViewController中完成按钮单击事件
- 26. C#窗体窗体打印单页按钮单击两页
- 27. WIndows窗体线程 - 等待窗体完成渲染
- 28. C# - 在Windows窗体keydown事件问题
- 29. Windows窗体在C#取消事件
- 30. C#中的事件和Windows窗体#
你是一个头发比我快...好的解决方案 – JoshBerke 2008-12-13 20:39:55