0

我找到了一个控件,它显示一个 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 方法,我猜这是提问的捷径。

4

0 回答 0