【问题标题】:Combobox inside ContextMenuStrip problemContextMenuStrip 内的组合框问题
【发布时间】:2011-06-17 13:59:59
【问题描述】:
鉴于以下疯狂的设置(在 ContextMenuStrip 内的 ToolStripControlHost 内的 UserControl 内的 ComboBox):
在 ComboBox 弹出窗口中单击不同项目时会发生一些奇怪的事情。如果该项目在菜单范围内(即阿姆斯特丹、布鲁塞尔或卢森堡),则该项目被选中。如果项目在菜单范围之外(即柏林和更远的地方),则菜单会立即关闭。
忽略任何关于纯粹疯狂的漂亮评论,任何人都知道发生了什么以及如果选择了一个遥远的组合框项目,如何阻止菜单关闭?
【问题讨论】:
标签:
winforms
events
combobox
contextmenu
【解决方案1】:
问题是由于对 ToolStripManager 的深入检查确定鼠标事件不在子级上。
基本上,如果 ComboBox 正在显示,您需要拒绝 ContextMenuStrip.OnClosing 事件。不可避免地有更清洁的解决方案,但我没有看到。
public bool IsDropDownShowing { get; private set; }
private void InitializeContextMenu()
{
var userControl = new ComboMenuUserControl();
var toolStripHost = new ToolStripControlHost(userControl);
contextMenuStrip1.Items.Add(toolStripHost);
userControl.comboBox1.DropDown += (o, args) => IsDropDownShowing = true;
userControl.comboBox1.DropDownClosed += (o, args) => IsDropDownShowing = false;
contextMenuStrip1.Closing += (o, args) =>
{
if (IsDropDownShowing == true)
args.Cancel = true;
};
}