Winforms ContextMenuStrip问题中的组合框
给定以下疯狂设置(ContextMenuStrip内ToolStripControlHost内UserControl内的组合框): 单击组合框弹出窗口中的不同项目时会出现一些奇怪的情况。如果项目在菜单范围内(即阿姆斯特丹、布鲁塞尔或卢森堡),则选中该项目。如果项目超出菜单范围(即Berlijn和其他),菜单将立即关闭Winforms ContextMenuStrip问题中的组合框,winforms,events,combobox,contextmenu,Winforms,Events,Combobox,Contextmenu,给定以下疯狂设置(ContextMenuStrip内ToolStripControlHost内UserControl内的组合框): 单击组合框弹出窗口中的不同项目时会出现一些奇怪的情况。如果项目在菜单范围内(即阿姆斯特丹、布鲁塞尔或卢森堡),则选中该项目。如果项目超出菜单范围(即Berlijn和其他),菜单将立即关闭 忽略任何关于“完全疯狂”的尖刻评论,有人知道发生了什么,以及如果选择了一个遥远的组合框项目,如何阻止菜单关闭吗?问题是由于ToolStripManager中的深层检查确定鼠标事件
忽略任何关于“完全疯狂”的尖刻评论,有人知道发生了什么,以及如果选择了一个遥远的组合框项目,如何阻止菜单关闭吗?问题是由于ToolStripManager中的深层检查确定鼠标事件不在子菜单上 基本上,如果显示组合框,则需要拒绝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;
};
}
问题是由于ToolStripManager中的深层检查确定鼠标事件不在子对象上 基本上,如果显示组合框,则需要拒绝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;
};
}
谢谢约翰,看起来很有希望。谢谢约翰,看起来很有希望。