博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MDI应用程序菜单的合并
阅读量:6713 次
发布时间:2019-06-25

本文共 2839 字,大约阅读时间需要 9 分钟。

  

MenuStrip控件的情况

基本菜单的边界

MDI的父窗口和子窗口中存在MenuStrip控件,子窗口在父窗口中表示的时候,子窗口的菜单会同父窗口的菜单结合(合并)在一起表示出来。

补充:当窗口中有复数个菜单的情况时,在Form.MainMenuStrip的属性中指定主菜单。在主窗口中合并在一起被表示。

到底合并以后被表示成什么样让我们来具体看一下。如下图所示,父窗口的top Menu中存在Item1和Item2,子窗口的top Menu中存在ChildItem1的时候,子窗口在父窗口中表示的时候,父窗口的top Menu中在末尾追加了ChildItem1。

子窗口中空菜单表示的解决方法

在子窗口中增加MenuStrip,父窗口的MenuStrip表示的情况下,子窗口的MenuStrip的Visible属性设置成false。如果设置成true不变的话,子窗口中的MenuStrip就会表示成空的菜单。

指定合并菜单的方法

ToolStripMenuItem类中的MergeAction和MergeIndex属性决定了菜单如何被合并在一起。下面对在MergeAction属性中可以被指定的枚举成员的值如何指定菜单合并逐一进行说明。

在一下的说明中,MDI的父窗口的Menu项目(ToolStripMenuItem)被成为父项目,子窗口中的Menu被称为子项目。

MergeAction.Append

子项目的MergeAction属性Append时,会在子项目菜单最后被追加。这个时候,MergeIndex属性的值会被无视。具体的话,如上图所示被合并在一起。

MergeAction.Insert

子项目的MergeAction属性Insert时,会在MergeIndex属性所制定的位置被插入。例如,子项目的MergeIndex被设为0会在Menu的开头被插入,1则在第二个位置被插入。子项目的MergeIndex的数目大于父项目的数目的时候则在最后的位置被插入。MergeIndex的值为-1时,子项目将不被表示。

之前的例子、ChildItem1的MergeAction被设为Insert、MergeIndex被设为1时,如下面的样子被合并。

MergeAction.Replace

子项目的MergeAction设置成Replace时,父项目中的项目将被子项目中MergeIndex指定的位置的内容所代替。若MergeIndex中该项目不存在的时候(包含-1的情况),将替代父项目中具有同样的Text属性的的内容。若找不到,则不表示子项目的内容。

如之前的例子,ChildItem1的MergeAction属性被设置成Replace,MergeIndex属性为1的时候,如下面的样子被合并表示。

MergeAction.Remove

子项目的MergeAction属性被设置为Remove时候,子项目的MergeIndex属性指定的位置的父项目将被消除。子项目也不表示。同Replace一样,MergeIndex属性找不到的时候,将会寻找同Text属性一致的项目。

如之前的例子,ChildItem1的MergeAction设置为Remove,MergeIndex设置为1的情况下,如下面一样被合并表示。

MergeAction.MatchOnly

子项目的MergeAction属性设置为MatchOnly的时候,子项目的MergeIndex属性指定位置的父项目的子菜单(Items属性中包含的项目)里,追加子项目的子菜单。子项目自身不表示,同Replace一样,MergeIndex属性找不到的情况下,将对Text属性进行匹配。

如前面的例子,ChildItem1的MergeAction属性设置为MatchOnly,MergeIndex设置为1的情况下,如下面一样被合并。Item21和Item22为原本在Item2中存在的项目,ChildItem11和ChildItem12为原本在ChildItem1中存在的项目。

MainMenu控件的情况

基本Menu的合并

MDI的父窗体和子窗体中存在MainMenu的控件,当子窗体在父窗体中表示的时候,父窗体的Menu中将子窗体的Menu合并表示。

补充:当窗体是复数个菜单的时候,主菜单通过Form.Menu属性来指定。在主窗体中合并表示。

如何合并表示让我们来具体看一下。如下图一样,父窗体的top Menu中存在MenuItem1和MenuItem2,子窗体的top Menu中存在ChildMenu1的时候,子窗体在父窗体内不表示的时候,父窗体的Top Menu的末尾将ChildMenu1追加上来。

指定合并菜单的插入位置

指定ChildMenu1的插入位置可以通过变更MenuItem.MergeOrder属性来实现。例如ChildMenu1要在MenuItem1和MenuItem2之间表示,

MenuItem1.MergeOrder = 0

MenuItem2.MergeOrder = 2
ChildMenu1.MergeOrder = 1

如上面一样、ChildMenu1的MergeOrder指定在MenuItem1和MenuItem2之间。也就是说,MergeOrder为Menu合并时候表示的顺序。

在一个Menu中合并

MenuItem1和ChildMenu1作为一个Menu显示时,MenuItem1和ChildMenu1的MergeOrder设置为同样的值,同时,MergeType设定适当的MenuMerge枚举类型的值。(MergeType的默认为Add,什么也不指定的情况下如最初的例子一样表示。)

MenuItem1和ChildMenu1的MergeOrder属性为同样值的时候,MergeType均为MergeItems的时候如下图一样合并表示。

MenuItem1和ChildMenu1的MergeOrder属性为相同值的时候,MenuItem1的MergeType为Replace,ChildMenu1的MergeItems为MergeItems的时候,MenuItem1不被表示。(也就是说MenuItem1被ChildItem1所置换。)

当MergeType属性为Remove的情况下,同MergeOrder一样,无论有没有,MenuItem都不会被表示。下图,MenuItem1和MenuItem2的MergeOrder为同样的值,同时子菜单的MenuItem11和ChildMenu11的MergeType属性为Remove。

补充:合并后的菜单可以通过Form.MergedMenu属性来取得。

(转载自)

转载于:https://www.cnblogs.com/llbofchina/archive/2010/04/21/1717081.html

你可能感兴趣的文章
JS的并行加载与执行顺序
查看>>
Linux下安装Hadoop(伪分布模式)
查看>>
Android UI设计准则
查看>>
IntelliJ IDEA 2017.3.1 使用手册
查看>>
互联网协议入门(2)
查看>>
DataSource的可配参数有哪些,有哪些DataSource可以用
查看>>
免费的后台管理界面框架
查看>>
本地文件共享服务(nfs samba ftp)
查看>>
scp通过代理proxy传输文件
查看>>
excel 打开时报“发现不可读的内容...”
查看>>
pandas-利用python进行数据分析
查看>>
数据段、代码段、堆栈段、BSS段的区别
查看>>
Apache Bench
查看>>
WebService之Axis2快速入门(5): 管理会话(Session)
查看>>
以太坊RPC接口使用
查看>>
普通html标签<form>和struts2<s:form>的区别
查看>>
安装NTFS For Mac时显示文件已损坏怎么办
查看>>
-webkit-line-clamp实现多行文字溢出隐藏显示省略号
查看>>
Sublime Text 3 - 设置自动换行
查看>>
nil / Nil / NULL / NSNull in Objective-C
查看>>