我正在尝试使我的自定义 ComboBox 继承自 ContainerControl。我以这篇文章为基础但重写了它,但我使用了 ToolStripControlHost、我自己的自定义 ListBox 和 ToolStripDropDown。
现在 ComboBox 是一个按钮,您单击该按钮以显示包含我的 ListBox 的 DropDown,可以很好地覆盖 OnMouseClick。
当我尝试关闭 DropDown 时,问题就开始了,DropDown 的“AutoClose”属性为 true,如果您单击 DropDown 外部的某个位置(包括按钮),DropDown 就会关闭......
protected override void OnMouseClick(MouseEventArgs e)
{
base.OnMouseClick(e);
/* listboxControl = ToolStripDropDown */
if (!listboxControl.Visible)
{
listboxControl.Show(this, GetDropLocation(), ToolStripDropDownDirection.BelowRight);
//listbox.Capture = true;
}
}
这是单击按钮的代码.. 如果单击它会发生什么?如果显示 DropDown,它首先关闭 DropDown,然后触发 OnMouseClick 事件。含义:listboxControl.Visible 已经为假,它将再次显示 DropDown。所有这些都会导致快速关闭打开。
我已经被这个问题困扰了一段时间,谷歌似乎对这个主题了解不多(CodeProject 上的那篇文章有同样的错误)。
我尝试过的是在显示 DropDown 后禁用 AutoClose 并捕获鼠标,这部分有效,但它会影响我托管的 ListBox 的工作。ListBox 包含一组控件(项),这些项具有悬停绘制效果。在 ListBox 控件中捕获鼠标可防止触发 OnMouseEnter。
所有输入将不胜感激!