c# mdi子窗体简单教程
一、参照自带例子做个mdi窗体
1、加入父窗体MainForm,并加入一个菜单栏,new form1 form2 windows
2、给new加命令
private int childFormNumber = 0;
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
Form childForm = new Form();//创建一个子窗体
childForm.MdiParent = this;//这一句很重要
childForm.Text = "窗口" + childFormNumber++;//窗体标题
childForm.Show();//显示之
}
现在试一下,按菜单new能生成子窗体了。但是,当所有的子窗体最大化,下面的会被最前面的挡住,如何把它们找出来呢?这就要用到菜单windows项了(不一定要叫windows,随便的),
3、网上都说把windows菜单的MdiWindowListItem属性设为true, 不过我在vs2008中没有找到。可以这样设置,打开MainForm.Designer.cs,在“Windows 窗体设计器生成的代码”一段中加一句“this.menuStrip1.MdiWindowListItem = this.windowsToolStripMenuItem;”(当你们的菜单名称不一样时自己改)。现在,再按菜单new后,windows下面会自动加入新生成的子窗体名称,跟word一样。
二、显示自己制作的窗体。
其实上面的例子没有多在实际用处,除非每个人都去编写字板。好,现在做一个小小的改进。在子窗体中显示自己制作的窗体。
在工程中新建两个窗体Form1,Form2,分别给form1和form2菜单加入命令。
private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
form1.MdiParent = this;
form1.Show();
}
private void form2ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.MdiParent = this;
form2.Show();
}
现在点击form1和form2后,能在子窗体中分别显示工程中的Form1和Form2窗体了。但是这也没有实际用处(网上很多教程都止于这一步),因为当你点击了两下form1后,子窗体中会显示两个一模一样的Form1窗体,实际编程中显然是没用的,比如我的工程项目中想在Form1窗体中设置几个参数,Form1只要显示一个就够了。下面再做点改进,
private static Form1 form1;
private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (form1==null ||form1.IsDisposed){
form1 = new Form1();
form1.MdiParent = this;
form1.Show();}
else { form1.Activate(); }
}
private static Form2 form2;
private void form2ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (form2 == null || form2.IsDisposed)
{
form2 = new Form2();
form2.MdiParent = this;
form2.Show();
}
else { form2.Activate(); }
}
这样,Form1和Form2窗体只会被实例化一次。即当Form1窗体显示时,再点击form1时,Form1不会再创建一个,而只是把在下面的提到最前面显示,变成激活的活动窗体。
三、题外话:MDI容器不能使用toolStripContainer,可以用ToolStripPanels代替。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)