Trick ComboBox认为它的'下拉是开放的,当它不是

时间:2013-11-08 04:24:08

标签: c#-4.0 combobox custom-controls override dropdownbox

我找到了一个控件,它显示了一个用于组合框下拉列表的CheckedListBox。我喜欢这个,但我想改进它。我想完全复制标准组合框的行为,如下所示:

当用户点击组合框时,下拉列表(CheckedListBox)会打开。

当用户点击下拉列表时,他们检查多个选项没有问题。

当用户再次点击ComboBox时,DropDown会隐藏。

当用户点击组合框时(无论是在控件上还是在窗体上),DropDown都会被隐藏。

我在P / Invoke.net上找到User32.DLL库中的PostMessage函数,它允许您使用CB_SHOWDROPDOWN(0x014F)消息向ComboBox发送消息,强制它立即关闭本机DropDown。

这样做的问题是它会自动强制调用基本ComboBox控件的OnDropDownClosed函数。这个我不会关心,但它会停止控制的自然感觉(对我来说至少),因为如果你用它做一些技巧来保持自定义下拉列表打开,当你点击控件时它仍然保持打开状态(因为ComboBox认为它的下拉已经关闭了。

这是我想避免的行为。我希望ComboBox认为它的DropDown仍未打开(直到用户点击组合框关闭它或点击控件)。

此外,我在打开原生组合框下拉列表之前遇到的问题是,当我点击自定义下拉列表时,ComboBox会触发OnDropDownClosed函数并且(看看我如何覆盖该方法来隐藏自定义下拉列表),我的下拉列表已隐藏。

因此...

如何覆盖OnDropDown方法以打开自定义自定义下拉列表,单击此按钮时,不会触发OnDropDownClosed方法,我想这是提问的简短方法。

0 个答案:

没有答案