原理是利用ToolStripControlHost可以承载自定义控件的这一能力,让下拉式控件ToolStripDropDown将任何自定义控件像右键菜单那样弹出来(别忘了右键菜单ContextMenuStrip 就是继承自ToolStripDropDown),这样就等于把菜单作为一个容器,可以弹出任何或简单或复杂的控件组合,同时又具有菜单具有的便捷性,召之即来挥之即去。 但很快发现一个在我看来还挺在意的不足,就是ToolStripDropDown只有Show,没有ShowDialog,就是不能以模式化(Modal,也有叫模态的,鉴于MSDN都称模式,我也随流叫它模式)的方式弹出 ,这是由ToolStripDropDown的固有能力决定的,该方案既然基于ToolStripDropDown,自然也受限于此,不能模式化弹出。 不过受该方案的启发,我想到用ContextMenu来做容器(注意这个菜单类跟上面提到的继承自ToolStripDropDown的ContextMenuStrip大大的不同,前者是OS原生的菜单,就是在桌面
window.
21 ///
22 [ToolboxItem(false)]
23 public partial class PopupForm : ToolStripDropDown see cref="T:System.Windows.Forms.ToolStrip" /> to accommodate the <see cref="T:System.Windows.Forms.<em>ToolStripDropDown</em> }
360
361 /// <summary>
362 /// Raises the <see cref="E:System.Windows.Forms.ToolStripDropDown.Opening }
375
376 ///
ToolBarButtonClickEventHandler,ToolBarButtonStyle,ToolBarTextAlign ContextMenu ContextMenuStrip Menu ToolStripDropDown
ToolBarButtonClickEventHandler,ToolBarButtonStyle,ToolBarTextAlign ContextMenu ContextMenuStrip Menu ToolStripDropDown
contextMenuStrip.Items.Add(toolStripMenuItem);// 设置ToolStripComboBox属性为TruetoolStripMenuItem.DropDown = new ToolStripDropDown