2023年12月6日发(作者:)
C#Winform编程自学笔记(三)多文档界面处理MDI
简介
因为毕业设计要用到Winform编程,所以计划用一个月的时间学一下,这篇笔记里包含了上机实操和代码理论两个部分,欢迎前来交
流~
另:此篇为C#Winform自学合集第三篇,接上篇(二)
使用教材:《C#Winform实践开发教程 》钱哨 + B站
(B站和CSDN是我名誉教授没错了)
开发环境: Visual Studio 2013 Freamwork 4.0
本篇笔记实践代码:
【导入时选择文件-》打开项目—》点击选择.sln文件即可】
内容一览
1. 多文档界面MDI处理
————————————正文————————————
与SDI的区别
1.定义
SDI——单文档窗口;
MDI——多文档窗口;
如何转换为MDI?
一般生成的窗口都是单文档窗口SDI,只有将它的IsMdiContainer属性设置为True才能设置为多文档窗口。
3.实践案例:如何建立一个MDI?
实验目标:
建立一个Form主窗体,并在该主窗体中建立菜单,通过菜单打开其余的子窗体。
实验步骤:
1)设置第一个窗体的属性为:
属性名称
text
StartPosition
FormBorderStyle
IsMdiContainer
属性参数设置
父窗口 窗体标签名称
CenterScreen 窗体居中
FixedToolWindow 无最大最小按钮
True 设置为MDI窗口
2)为该MDI窗体配置MainMenu菜单,工具箱默认没有该控件,打开工具箱的所有Windows控件部分,右击工具箱界面,在打开的菜单中
选择“选择项”命令,并在展开的“选择工具箱项”窗口中找到MainMenu菜单控件,添加后即出现在Windows的控件部分。
3)打开解决方案资源管理器,新建一个windows窗体,命名为Form2,该窗体非MDI窗体,双击父窗口菜单中的“子窗口1项目”,对源
代码进行编辑:
private void menuItem2_Click(object sender, EventArgs e)
{
Form2 Mdichild = new Form2();//
实例化
Form2
对象,并命名为
mdichild
ent = this;
//
其次指定即将打开的
Form2
窗体的父窗体
();//
显示
Form2
对象的父窗口
}
为“儿选项”指定窗口:
FormX Mdichild =new FormX();
为“儿窗口”指定父窗口:
ent = this;
4)此时,打开的From2窗口就只能在父窗口下活动,而不会超出父窗口的范围。按照此方法再建立两个窗体,命名为Form3和Form4,并
可以通过单击“子窗口2”和"子窗口3”菜单来打开它们。
实验结果:
单击文件,会显示三个选项,子窗口1,子窗口2,子窗口3,单击选择子窗口1,出现以下界面;且大娃只能在父亲范围活动;
窗体的排列
4.1 层叠
在主窗体中对MDI窗体的层叠操作是通过LayoutMdi来实现的,其参数为e。在原有的menuItem3_Click实践中添加
MDI窗体的层叠源代码如下:
4.2 水平
也是通过LayouMdi方法,此时的参数是rizontal
4.3 垂直
多文档界面的窗体传值技术
5.1 利用窗体参数定义进行传值
对新打开的窗口进行重载,改变参数之后就可以在打开这个窗口的时候把数据传进去。
实验目标:
建立一个MDI主窗体和两个子窗体,并实现打开某个窗体并录入信息后,可以将信息显示在另一个窗体中。
实验步骤:
1)在多文档的建立案例基础上,单击“窗口1”菜单项打开一个子窗口(我选择的是Form3,也就是第二个),对这个子窗口进行编辑
(参考下面实验结果中的效果图),同时新建立一个窗口,我为它命名为Form5,用以接收从Form3中传来的信息。
对Form3的加载源码做出以下编辑:
private void Form3_Load(object sender, EventArgs e)
{
edIndex = 0;
= " ";
();
}
2)在新建立的窗口Form5中,建立相应的空间以接收来自Form3的数据信息。回到表单窗体Form3,双击“发送”按钮,就将用户填写的
信息发送给form5.
这是“发送”按钮的源码:
private void button1_Click(object sender, EventArgs e)
{
if(==" " ||==" ")
{
("姓名和邮箱不能为空", "信息提示");
}
else
{
();
Form5 childForm7 = new Form5(, , ng(),);
();
}
}
(); //隐藏当前窗口
//传参,非常重要,需要对Form5进行设置
Form5 childForm7 = new Form5(, ,
ng(),);
(); //显示form5窗口
这是对From5的重新编辑:
public partial class Form5 : Form
{
private string _name;
private string _emailId;
private string _subject;
private string _feedBack;
public Form5(string varName,string varEmail,string varSubject,string varFeedBack)
{
InitializeComponent();
this._name = varName;
this._emailId = varEmail;
this._subject = varSubject;
this._feedBack = varFeedBack;
("姓名: " + this._emailId);
("邮件地址:" + this._emailId);
("信息主题:" + this._subject);
("反馈意见:" + this._feedBack);
}
private void Form5_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
("感谢您的信息!");
();
}
}
实验结果:
5.2 如何确保子窗体在转换的过程中受到MDI主窗口的控制
实验步骤:
1)在form5添加一个“返回”按钮,并对其源码做安排如下:
使得在单击返回按钮时,能够直接返回原窗口。
private void button2_Click(object sender, EventArgs e)
{
Form3 fm3 = new Form3();
();
();
}
2)后面实验太简单,不写了,就是将新打开的窗体的父窗体统一成它爸爸的窗体,统一为一个父窗体的时候,就都受一个老祖宗控制了。
5.3 如何防止重复打开窗口 教材P29
在要打开的窗口中加上
foreach(From childForm in this,MdiChildren)
{
if(=="Formccl")
{
e=true;
te();
return;
}
}


发布评论