2008-12-13 60 views
0

在我的主窗体上,还有另一个(可浮动的)窗口。这个可浮动窗口的工作方式类似于一个popupwindow,因为当用户单击此窗口之外的其他位置时它将关闭。这由Deactivate事件处理。但是我想要做的是,如果用户点击不同的控件(比如按钮),我想同时关闭这个浮动窗口,然后只需点击一下就可以激活该按钮。目前,用户必须点击两次(一次关闭窗口,再次激活所需的按钮)。只需点击一下就可以做到这一点吗?如何在Windows窗体中单击一下即可完成两件事

回答

0

我有一个稍微hacky的解决方案。在您的停用事件中,将另一个自定义事件触发到主窗体。然后,当你的主窗体处理自定义事件时,通过你的控件枚举(this.Controls)并通过检查所有的绑定找到鼠标下的控件,然后调用Focus()。您可能需要按最小表面积进行排序,或者您可以为此目的单独列出“可调焦”控件(如按钮)。

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

这些只是理论,没有经过测试。

2
foreach(Control c in parentForm.Controls) 
{ 
    c.Click += delegate(object sender, EventArgs e) 
       { 
        if(floatyWindow != null && floatyWindow.IsFloating) 
        { 
         floatyWindow.Close(); 
        } 
       }; 
} 

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

+0

你是一个头发比我快...好的解决方案 – JoshBerke 2008-12-13 20:39:55

0

我有一个这样的问题,当一个客户想要“浮动”的窗口在那里的应用程序。我用用类似于本文中描述的一种方法:

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在调试代码时遇到运行时错误时使用。

至少阅读代码可能会给你一些见解,然而,争吵的反应可能是更简单的解决方案。

+0

http://tinyurl.com – 2008-12-13 22:43:31

相关问题