winform实现菜单动态合并
下一篇:C# winform在状态栏中显示检查框【案例+源码】
在程序中经常使用弹出菜单,并且一个窗体中可以存在多个弹出菜单。开发
过 MDI 窗体的读者可能都知道,当 MDI 子窗体最大化时,子窗体和主窗体的菜单
能够自动的合并。这是如何实现的呢?本例实现了将两个弹出菜单动态的合并成
一个弹出菜单的功能。实例效果如下图所示。
C# 2.0 中已经将弹出菜单封装为 Context MenuStrip 控件,利用该控件中 的 Items
对象可以操作菜单中的菜单项。该对象是 ToolStripMenuItem 类型,使 用 Items.AddRange(
)方法可以向弹出菜单中添加菜单项,该方法原型如下。
public void AddRange (
ToolStripItem[] toolStripItems
)
参数说明如下。
l toolStripItems:控件的数组。
实现过程
(1)创建一个项目,将其命名为 Ex01_02,默认窗体为 Form1。
(2)从工具箱中向 Form1 窗体添加一个 MenuStrip 控件用来设计菜单;同
时向窗体添加 ContextMenuStrip 控件用来设计右键菜单;选中 MenuStrip 控件
创建一个“打开子窗体”主菜单,然后选中 ContextMenuStrip 控件为其添加子
项。
(3)为程序添加一个窗体,默认名为 Form2,同时向窗体添加 ContextMenu
Strip 控件用来设计右键菜单,然后选中 ContextMenuStrip 控件为其添加子项。
(4)主要程序代码。
private void 打开子窗体ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
f.MdiParent = this;
f.Show();
f.Resize += new EventHandler(f_Resize);
}
void f_Resize(object sender,EventArgs e)
{
Form2 f = (Form2)sender;
ToolStripMenuItem item = new ToolStripMenuItem();
for(int i = 0;i < f.contextMenuStrip1.Items.Count;)
{
item.DropDownItems.Add(f.contextMenuStrip1.Items[i]);
}
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[]{
item });
}
把Form1设置为MDI窗体(多文档界面)
设置窗体是否是MDI窗体,MDI(Multiple Document Interface) 就是所谓的多文档界面,
所以在做多文档界>面程序时要用.MDI父窗体相应的所有子窗体都要设置MdiParent属性.
子窗体永远都将在MDI父窗体框架之内.比如
FormA: IsMdiContainer = true; //MDI父窗体
FormB: IsMdiContainer = false; //子窗体
MdiParent = FormA;
举一反三 根据本实例,读者可以实现以下功能。
让右键菜单在子窗体中显示。
让右键菜单在主窗体和子窗体中同时显示。