去除MDI子窗体最大化后在MainMenuStrip上自动产生的图标和最大化、最小化等按钮(转)

本文介绍了如何在C#中去除MDI子窗体最大化时在主MenuStrip上自动生成的系统菜单图标和最大化、最小化按钮,以实现类Word风格的子窗体显示。通过监听MenuStrip的ItemAdded事件并在事件处理中隐藏特定菜单项,成功解决了这个问题。
摘要由CSDN通过智能技术生成

场景描述:

  • 程序有一个MDI父窗体frmMain,内含一个MenuStrip控件mnMain
  • MDI子窗体名为frmTransfer
  • mnMain包含菜单项“运单管理”及其子菜单项“调件运单”

当点击“购件运单”菜单项时,要求自动以最大化的方式显示子窗体frmTransfer

编写代码如下:

private void miShowTransfer_Click(object sender, EventArgs e)
{
     frmTransfer ft = new frmTransfer();
     ft.MdiParent = this;
     ft.WindowState = FormWindowState.Maximized;
     ft.Show();
}

运行后如下图:

我们发现在菜单mnMain被自动添加了一个图标(最左侧)和三个窗体控制按钮(最右铡):最小化按钮,还原(最大化)按钮,关闭按钮。而这不是我们想要的,我们更希望它与我们常用的Windows软件保持一致的风格,另外最好能像Word那样只有一个“关闭”按钮。

ps:如果你不是一开始就让子窗体最大化而是手动最大化,那么这些自动的行为可能会让你更不舒服,因为菜单看起来在“动”,至少这让我感到混乱。

那么至少要除去左侧的图标(实际上是对应的System菜单),如果可能再去掉“最小化”和“还原”按钮。

思路A:首先想到的是对子窗体进行设计时设置,将ControlBox属性设置为False。可这样一来连“关闭”按钮也没了,还要在主菜单右侧自己添加一个ToolStripMenuItem,并判断当前活动窗口来实现关闭功能。虽然应该可行,但感觉有点剑走偏锋的意味。更何况别忘了还要控制这个人造“关闭”按钮的显隐逻辑:一开始没有子窗体时不能让它显示出来,打开子窗体后则要让它显示;而关闭子窗体后还要判断是不是最后一个子窗体,如果是要让它隐藏——这实在有点小麻烦,我是懒人,所以放弃了这个思路。

思路B:那么设置子窗体的MaximizedBox,MinimizeBox属性为False,ShowIcon属性也设为Fa

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值