更新以反映我的请求的更实用的描述。
ComboBox
从功能上讲,我需要一个不直接从System.Windows.Forms.ComboBox
类继承的只读文件。我需要将文本框部分设为只读,以便用户可以复制输入框中的文本但不能更改它。这不是使用DropDown
vsDropDownList
模式的情况。
使用本文和一些实验,我已经处理了文本框部分,但由于下面列出的技术原因,仍然需要防止下拉组件的更改。我仍然需要以下之一:
- 禁用 - 上的下拉按钮
ComboBox
以防止其打开 - 防止下拉菜单
ComboBox
在单击时打开 - 防止从下拉列表中选择项目更改控件中的选择(可能通过拦截和忽略单击项目通知消息)
我在我的应用程序中使用KryptonToolkit来获得视觉美感。对于KryptonComboBox
控件,它有一个内部的扩展System.Windows.Forms.ComboBox
类来拦截绘图调用。它公开了对该ComboBox
对象的访问权限,因此我可以访问它的Handle
.
我使用A Complete Read Only ComboBox代码作为基础来创建KryptonComboBox
. 您必须使用来获取 Windows 控件的实际句柄,而不是KryptonComboBox.Handle
在调用中使用。通过这样做,我可以在 ComboBox 的文本框部分正确设置只读模式。SendMessage()
KryptonComboBox.ComboBox.Handle
但!由于扩展控件的基类 isKryptonComboBox
和 not ComboBox
,所以当WndProc()
调用 时,它是针对KryptonComboBox
. 因此,当控件处于只读模式时,我无法阻止控件对单击的下拉项执行操作(更改选择)。
如何拦截(并可能忽略)来自现有 ComboBox 控件的 WM_COMMAND 消息。具体来说,我希望在某些情况下忽略消息 273 链。有没有办法在功能上对“外部”ComboBox
控件做同样的事情,我可以从继承的控件中做同样的事情?既然我有Handle
for the ComboBox
,我可以使用类似的东西SetWindowsHookEx()
来拦截消息吗?