C#知识|上位机子窗体嵌入主窗体方法(实例)

C#知识|上位机子窗体嵌入主窗体方法(实例)

编码文章call10242025-06-09 20:35:416A+A-

#春日生活打卡季#
哈喽,你好啊,我是雷工!

上位机开发中,经常会需要将子窗体嵌入到主窗体,

本节练习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 后记

项目开发中,功能的实现是一方面,但是编程代码是否优雅漂亮是程序员的自我修养。

屎山能实现功能,优雅的代码也能实现功能,但优雅简洁的代码更容易阅读和后期维护,

愿我们都能写出优雅地代码,与君共勉!

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4