自定义了个combobox想在单击其他的地方的时候关闭下拉框

Tim_Andy 2011-08-30 04:30:19
我想出了两种方法都不太满意。
1,下拉到时候capture,在外边单击的时候releasecapture。。。
这个情况有个问题,如果在外边的按钮上单击。按钮收不到消息
2.全局钩子
其他控件能收到消息啊,但是这个有点卡啊。


请各位帮忙出出主意
...全文
405 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tim_Andy 2011-09-01
  • 打赏
  • 举报
回复
最后把挂载钩子扔到线程池里处理了,就不卡了。注意处理时Invoke到UI线程,否则无效。Dispose的时候卸载掉
Tim_Andy 2011-08-30
  • 打赏
  • 举报
回复
补充下e.X e.Y为全局钩子返回的坐标(相对于屏幕) dropdown的坐标也是相对于屏幕的,就不用转了
Tim_Andy 2011-08-30
  • 打赏
  • 举报
回复
谢谢各位解答。最后还是用的钩子。就是关闭程序的时候有点卡。希望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();
}
wuhuabucai 2011-08-30
  • 打赏
  • 举报
回复
给一个bt的办法
在该控件添加到父容器的时候
遍历顶级父容器的所有控件 并加上keydown事件
Tim_Andy 2011-08-30
  • 打赏
  • 举报
回复
那岂不是要在所有的控件里都加上KeyDown。那如果点击其他程序的话就捕捉不到了。。。
不知道.Net内部的ToolStripManager是怎么处理
我要的效果是vs标准工具栏中那个下拉搜索的控件的效果。(单击输入框,不关闭下拉框。单击其他地方(除了组合控件的任何地方包括其他程序)关闭)
Just4life 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xuchonglei 的回复:]

引用 2 楼 wangyong0921 的回复:
其他地方是什么意思?

1。如果是点击ComboBox的其他地方,这个比较好实现,不用讲了吧?
2。如果是点击ComboBox以外的地方,当你失去焦点的时候,去处理不就行了吗?

单击其他控件的时候失去焦点,这种情况好处理,只要处理Leave事件就可以了。
但是单击空白处呢。。讲讲吧
[/Quote]

最笨的方法,在WinForm控件里面处理KeyDown事件
wangyue4 2011-08-30
  • 打赏
  • 举报
回复
我想在除comboBox的所有控件的单击事件加上
comboBox1.text = comboBox1.SelectedItem.ToString()
Tim_Andy 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangyong0921 的回复:]
其他地方是什么意思?

1。如果是点击ComboBox的其他地方,这个比较好实现,不用讲了吧?
2。如果是点击ComboBox以外的地方,当你失去焦点的时候,去处理不就行了吗?
[/Quote]
单击其他控件的时候失去焦点,这种情况好处理,只要处理Leave事件就可以了。
但是单击空白处呢。。讲讲吧
Just4life 2011-08-30
  • 打赏
  • 举报
回复
其他地方是什么意思?

1。如果是点击ComboBox的其他地方,这个比较好实现,不用讲了吧?
2。如果是点击ComboBox以外的地方,当你失去焦点的时候,去处理不就行了吗?
Tim_Andy 2011-08-30
  • 打赏
  • 举报
回复
我靠,发了两遍。。。。谁给解决了两个帖子分都给他拉
vb.net操作DataGridView控件的用法的集合,包括: 1. DataGridView当前的单元格属性取得、变更 2. DataGridView编辑属性 3. DataGridView最下面一列新追加行非表示 4. DataGridView判断当前选中行是否为新追加的行 5. DataGridView删除行可否设定 6. DataGridView行列不表示和删除 DataGridView控件用法合集(二) 7. DataGridView行列宽度高度设置为不能编辑 8. DataGridView行高列幅自动调整 9. DataGridView指定行列冻结 10. DataGridView列顺序变更可否设定 11. DataGridView行复数选择 12. DataGridView选择的行、列、单元格取得 DataGridView控件用法合集(三) 13. DataGridView指定单元格是否表示 14. DataGridView表头部单元格取得 15. DataGridView表头部单元格文字列设定 16. DataGridView选择的部分拷贝至剪贴板 17.DataGridView粘贴 18. DataGridView单元格上ToolTip表示设定(鼠标移动到相应单元格上时,弹出说明信息) DataGridView控件用法合集(四) 19. DataGridView中的ContextMenuStrip属性 20. DataGridView指定滚动框位置 21. DataGridView手动追加列 22. DataGridView全体分界线样式设置 23. DataGridView根据单元格属性更改显示内容 24. DataGridView新追加行的行高样式设置る 25. DataGridView新追加行单元格默认值设置 DataGridView中输入错误数据的处理(五) 26. DataGridView单元格数据错误标签表示 27. DataGridView单元格内输入值正确性判断 28. DataGridView单元格输入错误值事件的捕获 DataGridView控件用法合集(六) 29. DataGridView行排序(点击列表头自动排序的设置) 30. DataGridView自动行排序(新追加值也会自动排序) 31. DataGridView自动行排序禁止情况下的排序 32. DataGridView指定列指定排序 DataGridView控件用法合集(七) 33. DataGridView单元格样式设置 34. DataGridView文字表示位置的设定 35. DataGridView单元格内文字列换行 36. DataGridView单元格DBNull值表示的设定 37. DataGridView单元格样式格式化 38. DataGridView指定单元格颜色设定 39. DataGridView单元格文字字体设置 40. DataGridView根据单元格值设定单元格样式 DataGridView控件用法合集(八) 41. DataGridView设置单元格背景颜色 42. DataGridView行样式描画 43. DataGridView显示行号 44. DataGridView焦点所在单元格焦点框不显示的设定 DataGridView控件用法合集(九) 45. DataGridView中显示选择框CheckBox 46. DataGridView中显示下拉框ComboBox 47. DataGridView单击打开下拉框 48. DataGridView中显示按钮 49. DataGridView中显示链接 50. DataGridView中显示图像 DataGridView控件用法合集(十) 51. DataGridView编辑中单元格控件取得 52. DataGridView输入自动完成 53. DataGridView单元格编辑时键盘KEY事件取得 54. DataGridView下拉框ComboBox)单元格编辑时事件取得 55. DataGridView下拉框ComboBox)单元格允许文字输入设定 DataGridView控件用法合集(十一) 56. DataGridView根据值不同在另一列中显示相应图片 57. DataGridView中显示进度条(ProgressBar) 58. DataGridView中添加MaskedTextBox DataGridView控件用法合集(十二) 59. DataGridView中Enter键按下焦点移至旁边的单元格 60. DataGridView行集合化(Group)
根据UIAutomation封装了很多自定义方法 现在只需要实例化之后 直接调用方法即可完成。比如单击某个按钮,现在只需要直接调用ClickElement,非常实用。 ClickElement 单击指定的自动化元素 DisselectAllDataGridRow 不选中所有行 DisselectDataGridRow 不选中特定的某一行 FocusWindow 获取窗口焦点 GetAllElement 获取指定父自动化元素下的所有激活的控件 GetAllElementDetails 获取指定自动化元素下的详细信息包括AutomationID,ControlType以及Name GetAllMenus 获取所有菜单项 GetAllSubMenus 获取某个菜单下的所有子菜单项 GetColumnsFromGridLine 获取指定行的所有列 GetColumnValuesFromGridLine 获取行的每一列数据 GetControlType(AutomationElement) 获取制动自动化元素的控件类型 GetControlType(TypeOfControl) 获取UIAutomation的控件类型 GetDocumentText 获取document控件的值 GetElementByID 获取父自动化元素下指定元素控件ID的引用 GetElementByName 获取父自动化元素下的指定子元素的引用 GetElementsByControlType 获取父自动化元素下的特定类型的所有自动化元素 GetGridLinesFromDataGrid 获取网格控件的全部行元素的引用 GetHeaderFromDataGrid 获取指定网格控件的标题栏引用 GetMenuBar 获取菜单栏控件 GetMenuByName 通过特定的名称去获取菜单UI自动化元素 GetName 获取指定自动化元素的名称 GetSubMenuByName 获取主菜单下的指定子菜单项的引用 GetValue 获取指定自动化元素的值 GetWindowByName(String) 获取desktop下的指定窗口名称的子UI自动化元素 GetWindowByName(String, AutomationElement) 获取特定父UI自动化元素下的制定窗口名称的子UI自动化元素 GetWindowList() 获取当前桌面根下所有的UI自动化元素下 GetWindowList(AutomationElement) 获取特定父UI自动化元素下的所有窗口的名称 RefindMainApplication 重新获取desktop下的指定窗口的自动化元素引用 SelectAllDataGridRow 选中所有行 SelectDataGridRow(AutomationElement) 选中特定的某一行 SelectDataGridRow(AutomationElement, Boolean) 将特定的DateGridRow加入选中项中 SelectValueInComboBox下拉框中选中指定值的项 SelectValueInListBox 从列表中选中指定值的项 SetValue 给予指定自动化元素赋值 以上的方法还不是很完善 正在完善中。如果有什么意见和建议,请发送邮件获取 chenxu7601257@qq.com 如果你看了这个帮助文件之后觉得有用的,请发邮件获取,我将把dll文件给你。谢谢。
Struts 2 标签库(文档手册) Tags-API-CLSW-JSP <%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. -----超链接,类似于html里的 3. -----执行一个view里面的一个action 4. -----如果action的errors有值那么显示出来 5. -----如果action的message有值那么显示出来 6. -----添加一个值到list,类似于list.add(); 7. -----自动完成combobox>标签的内容,这个是ajax B: 1. -----类似于struts1.x中的,JavaBean的值 C: 1. -----复选框 2. -----多选框 3. combobox list="">combobox>-----下拉框 4. -----图像符号 D: 1. -----获取日期格式 2. -----日期输入框 3. -----显示错误信息 4. -----表示一个块,类似于html的
5. -----双下拉框 E: 1. 2. 3. -----这3个标签一起使用,表示条件判断 F: 1. -----显示文件错误信息 2. -----文件上传 3. -----获取相应form的值 G: 1. ----和标签一起使用 H: 1. -----在里使用,表示头文件结束 2. -----隐藏值 I: 1. -----加载资源包到值堆栈 2. -----包含一个输出,servlet或jsp页面 3. -----获取form的一个输入 4. -----用于遍历集合 L: 1. -----只读的标签 M: 1. -----合并遍历集合出来的值 O: 1. -----获取标签组 2. -----左右选择框 P: 1. -----为其他标签提供参数 2. -----密码输入框 3. -----得到'value'的属性 4. -----value的值push到栈中,从而使property标签的能够获取value的属性 R: 1. 2. -----单选按钮 3. -----重置按钮 S: 1. -----单选框 2. -----赋予变量一个特定范围内的值 3. -----通过属性给list分类 4. -----提交按钮 5. -----为遍历集合输出子集 T: 1. -----表格框 2. -----表格 3. -----I18n文本信息 4. -----文本域输入框 5. -----文本输入框 6. -----拦截器 7. -----树 8. -----树的结构 U: 1. -----多选择框 2. -----创建url ___________________________________________________ struts2框架的标签库分为三类: 用户标签:生成HTML元素 非用户标签:数据访问、逻辑控制等。 AJAX标签:支持AJAX技术。 用户界面标签又分两类: 表单标签:生成HTML页面的from元素 非表单标签:生成页面上的Tab、Tree等 非界面标签又分为数据访问标签和流程控制标签。 控制标签: if/elseif/else标签:控制流程分支。 iteratot标签:对集合属性迭代(属性类型:List、Map、数组)。 append标签:将多个集合对象拼接在一起,组成一个新的集合。将多个集合使用一个标签完成迭代。 generatot标签:将指定的字符串按照规定的分隔符分解成多个子字符串。 merge标签:将多个集合拼接在一起。 subset标签:获取某个集合的子集合。 sort标签:多指定的集合元素进行排序。 数据标签: action:直接调用一个Action,根据executeResult参数,可以将Action的处理结果包含到页面中。 bean:创建一个JavaBean实例。。 date:格式化输出一个日期属性。 debug:生成一个调试链接,当单击该链接时,可以看到当前栈值中的内容。 i18n:指定国际化资源文件的baseName。 include:包含其他的页面资源。 param:设置参数。 property:输出某个值。可以输出值栈、StackContext 、ActionContext中的值。 push:将某个值放入值栈。 set:设置一个新的变量。 text:输出国际化信息。 url:生成一个URL地址。 表单标签: checkbox标签:复选框。 checkboxlist标签:根据一个集合属性创建一系列的复选框。 combobox标签:生成一个单选文本框和一个下拉列表框的组合。 doubleselect标签:生成一个相互关联的列表框,该标签由两个下拉选择框组成。 datetimepicker标签:生成一个日期、时间下拉列表框。 head标签:生成HTML页面的HEAD部分。 file标签:在页面上生成一个上传文件元素。 hidder标签:生成一个不看见的用户输入元素。 select标签:生成下拉列表框。 optiontransferselect标签:创建两个选项以及转移下拉列表项,该标签生成两个下拉列表框,同时生成相应的按钮,这些按钮可以控制选项在两个下拉列表之间移动、排序。 radio标签:单选框。 optgroup标签:生成一个下拉列表框的选择组,下拉列表框中可以包含多个选择组。 token标签:防用户多次提交表单。 textarea标签:文本域。 updownselct标签:支持选项内容的上下移动。 password表单:密码表单域。 textfield标签:单行文本输入框。 非表单标签: actionerror标签:输出Action中getActionErrors()方法返回的异常信息。 actionmessage标签:输出Action中getActionErrors()方法返回的信息。 component标签:生成一个自定义的组件。 div标签:AJAX标签,生成一个div片段。 fielderror标签:输出异常提示信息。 tabbedPanel:AJAX标签,生成HTML中的Tab页。 tree标签:生成一个树形结构。 treenode标签:生成树形结构的节点。

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧