自定义了个combobox想在单击其他的地方的时候关闭下拉框 我想出了两种方法都不太满意。1,下拉到时候capture,在外边单击的时候releasecapture这个情况有个问题,如果在外边的按钮上单击。按钮收不到消息2.全局钩子其他控件能收到消息啊,但是这个有点卡啊。请各位帮忙出出主意 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其他地方是什么意思?1。如果是点击ComboBox的其他地方,这个比较好实现,不用讲了吧?2。如果是点击ComboBox以外的地方,当你失去焦点的时候,去处理不就行了吗? 单击其他控件的时候失去焦点,这种情况好处理,只要处理Leave事件就可以了。但是单击空白处呢。。讲讲吧 我想在除comboBox的所有控件的单击事件加上comboBox1.text = comboBox1.SelectedItem.ToString() 最笨的方法,在WinForm控件里面处理KeyDown事件 那岂不是要在所有的控件里都加上KeyDown。那如果点击其他程序的话就捕捉不到了不知道.Net内部的ToolStripManager是怎么处理我要的效果是vs标准工具栏中那个下拉搜索的控件的效果。(单击输入框,不关闭下拉框。单击其他地方(除了组合控件的任何地方包括其他程序)关闭) 给一个bt的办法在该控件添加到父容器的时候遍历顶级父容器的所有控件 并加上keydown事件 谢谢各位解答。最后还是用的钩子。就是关闭程序的时候有点卡。希望release时能好点/ Point textTopLeft = base.Parent.PointToScreen(new Point(base.Left, base.Top)); Rectangle rectText = new Rectangle(textTopLeft, base.Size); Point popTopLeft = new Point(this._dropDown.Left, this._dropDown.Top); Rectangle rect = new Rectangle(popTopLeft, this._dropDown.Size); if (rectText.Contains(e.X, e.Y) || rect.Contains(e.X, e.Y)) { } else { this._dropDown.Hide(); } 补充下e.X e.Y为全局钩子返回的坐标(相对于屏幕) dropdown的坐标也是相对于屏幕的,就不用转了 最后把挂载钩子扔到线程池里处理了,就不卡了。注意处理时Invoke到UI线程,否则无效。Dispose的时候卸载掉 用thread开启线程和异步接收socket的疑问? 关于DateTime.toString(string)返回字符串中加入反斜杠的问题 DateTime能否直接返回一个表示星期几的数字 BindingSource bindingsource1操作问题 datagridview怎么绑定combobox 如何用Visual C#建立个性化的windows应用 自定义控件的问题 想实现一个客户端,网站新闻更新,主动通知客户端更新,弹出消息提示框,类似QQ的新闻订阅? .net 中 com+ 组件类的属性问题 html页面Select标签绑定数据库的表的数据怎么实现 时间的计算 初学者 求助
2。如果是点击ComboBox以外的地方,当你失去焦点的时候,去处理不就行了吗?
但是单击空白处呢。。讲讲吧
comboBox1.text = comboBox1.SelectedItem.ToString()
最笨的方法,在WinForm控件里面处理KeyDown事件
不知道.Net内部的ToolStripManager是怎么处理
我要的效果是vs标准工具栏中那个下拉搜索的控件的效果。(单击输入框,不关闭下拉框。单击其他地方(除了组合控件的任何地方包括其他程序)关闭)
在该控件添加到父容器的时候
遍历顶级父容器的所有控件 并加上keydown事件
Point textTopLeft = base.Parent.PointToScreen(new Point(base.Left, base.Top));
Rectangle rectText = new Rectangle(textTopLeft, base.Size);
Point popTopLeft = new Point(this._dropDown.Left, this._dropDown.Top);
Rectangle rect = new Rectangle(popTopLeft, this._dropDown.Size); if (rectText.Contains(e.X, e.Y) || rect.Contains(e.X, e.Y))
{ }
else
{
this._dropDown.Hide();
}