C#知识|上位机子窗体嵌入主窗体方法(实例)
#春日生活打卡季#
哈喽,你好啊,我是雷工!
上位机开发中,经常会需要将子窗体嵌入到主窗体,
本节练习C#中在主窗体的某个容器中打开子窗体的方法。
01 需求说明
本节练习将【账号管理】子窗体在主窗体的panelMain容器中打开。
账号管理子窗体如下:
主窗体的panelMain容器位置如图:
02 实现效果
实现效果,当点击主窗体的【账号信息管理】按钮时,在PanelMain容器打开【账号管理】子窗体。
03 实现步骤
3.1、创建事件
双击【账号信息管理】按钮创建按钮事件
private void btnMessageManage_Click(object sender, EventArgs e)
{
//此处写事件代码
}
3.2、事件代码
在创建的按钮事件框架内编写点击按钮时要执行的代码;
代码如下:
private void btnMessageManage_Click(object sender, EventArgs e)
{
//判断容器中是否已经打开子窗体,如果打开现将其关闭
foreach (Control item in this.panel_Main.Controls)
{
if (item is Form)
{
((Form)item).Close();
}
}
//创建子窗体
FrmIPManager childForm = new FrmIPManager();
childForm.TopLevel = false;//将子窗体设置成非顶级控件
childForm.FormBorderStyle = FormBorderStyle.None;//如果是带边框的窗体,需要去掉窗体边框;
childForm.Parent = this.panel_Main;
childForm.Dock = DockStyle.Fill;//设置随着容器的大小自动调整窗体大小;
childForm.Show();
}
3.3、运行即可
点击运行即可实现效果展示示的功能。
04 代码优化
按照03的实现步骤也可以实现要求的效果,但是该写法,其他按钮再打开其他子窗体时,还需要将该段代码赋值到其他事件,修改对应的子窗体名称,除了要打开的子窗体,其他大部分为重复代码。
为了使代码简洁,可以按如下方式对代码进行优化。
优化思路:将重复的代码提取出来写成方法,然后任意按钮调用该方法,只传送要打开的子窗体即可。
通用方法代码如下:
//子窗体嵌入主窗体通用方法:
private void btnMessageManage_Click(object sender, EventArgs e)
{
//判断容器中是否已经打开子窗体,如果打开现将其关闭
foreach (Control item in this.panel_Main.Controls)
{
if (item is Form)
{
((Form)item).Close();
}
}
childForm.TopLevel = false;//将子窗体设置成非顶级控件
childForm.FormBorderStyle = FormBorderStyle.None;//如果是带边框的窗体,需要去掉窗体边框;
childForm.Parent = this.panel_Main;
childForm.Dock = DockStyle.Fill;//设置随着容器的大小自动调整窗体大小;
childForm.Show();
}
按钮调用通用方法代码如下:
private void btnMessageManage_Click(object sender, EventArgs e)
{
OpenForm(new FrmIPManager());//按钮事件调用通用方法
}
优化后的代码运行效果和之前效果一样,但要简洁很多,特别是主窗体要打开不同子窗体的按钮较多时,优化后的方式比较简洁。
05 后记
项目开发中,功能的实现是一方面,但是编程代码是否优雅漂亮是程序员的自我修养。
屎山能实现功能,优雅的代码也能实现功能,但优雅简洁的代码更容易阅读和后期维护,
愿我们都能写出优雅地代码,与君共勉!