下拉框,AutoClose=false的情况下自动关闭下拉框(ToolStripHost)

应用场景:
1,Winform
2,ToolStripHost与输入控件组合焦点可在两者直接自由切换.
3,当输入控件获取焦点后,ToolStripHost不能自动关闭.所以只能将AutoClose设置为false.
实现目标:
组合控件失去焦点或单击其他区域时,隐藏ToolStripHost
实现:
1,失去焦点可在LostFoucus事件处理或重写WndProc方法处理WM_KILLFOCUS消息.
2,单击其他区域时有两种方法处理
(1)通过全局鼠标钩子http://globalmousekeyhook.codeplex.com/获取单击时的坐标并判断坐标是否落在组合控件上.
if (this._dropDown.Visible) { Rectangle baseRect = new Rectangle(base.Parent.PointToScreen(base.Location), base.Size);//输入控件坐标转换为屏幕坐标 Rectangle dropRect = new Rectangle(this._dropDown.Location, this._dropDown.Size);//ToolStripHost坐标本身为屏幕坐标不需转换 if (!baseRect.Contains(e.X, e.Y) && !dropRect.Contains(e.X, e.Y)) this._dropDown.Hide();//隐藏 }
特别说明:构造函数中注册钩子,Dispose方法中卸载钩子.
(2)组合控件实现IMessageFilter接口
在程序调度消息之前处理几个鼠标消息即可
public bool PreFilterMessage(ref Message m) { switch (m.Msg) { case NativeMethods. WM_LBUTTONDOWN: _disibledevent=>
Tags:  下拉框

延伸阅读

最新评论

发表评论