1,下拉到时候capture,在外边单击的时候releasecapture。。。
这个情况有个问题,如果在外边的按钮上单击。按钮收不到消息
2.全局钩子
其他控件能收到消息啊,但是这个有点卡啊。
请各位帮忙出出主意
10 个解决方案
#1
我靠,发了两遍。。。。谁给解决了两个帖子分都给他拉
#2
其他地方是什么意思?
1。如果是点击ComboBox的其他地方,这个比较好实现,不用讲了吧?
2。如果是点击ComboBox以外的地方,当你失去焦点的时候,去处理不就行了吗?
1。如果是点击ComboBox的其他地方,这个比较好实现,不用讲了吧?
2。如果是点击ComboBox以外的地方,当你失去焦点的时候,去处理不就行了吗?
#3
单击其他控件的时候失去焦点,这种情况好处理,只要处理Leave事件就可以了。
但是单击空白处呢。。讲讲吧
#4
我想在除comboBox的所有控件的单击事件加上
comboBox1.text = comboBox1.SelectedItem.ToString()
comboBox1.text = comboBox1.SelectedItem.ToString()
#5
最笨的方法,在WinForm控件里面处理KeyDown事件
#6
那岂不是要在所有的控件里都加上KeyDown。那如果点击其他程序的话就捕捉不到了。。。
不知道.Net内部的ToolStripManager是怎么处理
我要的效果是vs标准工具栏中那个下拉搜索的控件的效果。(单击输入框,不关闭下拉框。单击其他地方(除了组合控件的任何地方包括其他程序)关闭)
不知道.Net内部的ToolStripManager是怎么处理
我要的效果是vs标准工具栏中那个下拉搜索的控件的效果。(单击输入框,不关闭下拉框。单击其他地方(除了组合控件的任何地方包括其他程序)关闭)
#7
给一个bt的办法
在该控件添加到父容器的时候
遍历*父容器的所有控件 并加上keydown事件
在该控件添加到父容器的时候
遍历*父容器的所有控件 并加上keydown事件
#8
谢谢各位解答。最后还是用的钩子。就是关闭程序的时候有点卡。希望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();
}
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();
}
#9
补充下e.X e.Y为全局钩子返回的坐标(相对于屏幕) dropdown的坐标也是相对于屏幕的,就不用转了
#10
最后把挂载钩子扔到线程池里处理了,就不卡了。注意处理时Invoke到UI线程,否则无效。Dispose的时候卸载掉
#1
我靠,发了两遍。。。。谁给解决了两个帖子分都给他拉
#2
其他地方是什么意思?
1。如果是点击ComboBox的其他地方,这个比较好实现,不用讲了吧?
2。如果是点击ComboBox以外的地方,当你失去焦点的时候,去处理不就行了吗?
1。如果是点击ComboBox的其他地方,这个比较好实现,不用讲了吧?
2。如果是点击ComboBox以外的地方,当你失去焦点的时候,去处理不就行了吗?
#3
单击其他控件的时候失去焦点,这种情况好处理,只要处理Leave事件就可以了。
但是单击空白处呢。。讲讲吧
#4
我想在除comboBox的所有控件的单击事件加上
comboBox1.text = comboBox1.SelectedItem.ToString()
comboBox1.text = comboBox1.SelectedItem.ToString()
#5
最笨的方法,在WinForm控件里面处理KeyDown事件
#6
那岂不是要在所有的控件里都加上KeyDown。那如果点击其他程序的话就捕捉不到了。。。
不知道.Net内部的ToolStripManager是怎么处理
我要的效果是vs标准工具栏中那个下拉搜索的控件的效果。(单击输入框,不关闭下拉框。单击其他地方(除了组合控件的任何地方包括其他程序)关闭)
不知道.Net内部的ToolStripManager是怎么处理
我要的效果是vs标准工具栏中那个下拉搜索的控件的效果。(单击输入框,不关闭下拉框。单击其他地方(除了组合控件的任何地方包括其他程序)关闭)
#7
给一个bt的办法
在该控件添加到父容器的时候
遍历*父容器的所有控件 并加上keydown事件
在该控件添加到父容器的时候
遍历*父容器的所有控件 并加上keydown事件
#8
谢谢各位解答。最后还是用的钩子。就是关闭程序的时候有点卡。希望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();
}
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();
}
#9
补充下e.X e.Y为全局钩子返回的坐标(相对于屏幕) dropdown的坐标也是相对于屏幕的,就不用转了
#10
最后把挂载钩子扔到线程池里处理了,就不卡了。注意处理时Invoke到UI线程,否则无效。Dispose的时候卸载掉