C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子

2023-11-02

C#WinForm父级窗体内Panel容器中嵌入子窗体、程序主窗体设计例子

在项目开发中经常遇到父级窗体嵌入子窗体所以写了一个例子程序,顺便大概划分了下界面模块和配色,不足之处还望指点

主窗体窗体采用前面一篇博客设计扁平化窗体 

C#自定义Winform无边框窗体

主要思路

1 this.IsMdiContainer=true;//设置父窗体是容器
2 Son mySon=new Son();//实例化子窗体
3 mySon.MdiParent=this;//设置窗体的父子关系
4 mySon.Parent=pnl1;//设置子窗体的容器为父窗体中的Panel
5 mySon.Show();//显示子窗体,此句很重要,否则子窗体不会显示

窗体设计上中下结构,最顶部是导航栏,其次是Top窗体部分、中间是Center内容部分、最底部是bottom导航面板

可以专门写一个方法做显示窗体

 1         /// <summary>
 2         /// 显示窗体
 3         /// </summary>
 4         /// <param name="panel"></param>
 5         /// <param name="frm"></param>
 6         public void ShowForm(System.Windows.Forms.Panel panel, System.Windows.Forms.Form frm)
 7         {
 8             lock (this)
 9             {
10                 try
11                 {
12                     if (this.currentForm != null && this.currentForm == frm)
13                     {
14                         return;
15                     }
16                     else if (this.currentForm != null)
17                     {
18                         if (this.ActiveMdiChild != null)
19                         {
20                             this.ActiveMdiChild.Hide();
21                         }
22                     }
23                     this.currentForm = frm;
24                     frm.TopLevel = false;
25                     frm.MdiParent = this;
26                     panel.Controls.Clear();
27                     panel.Controls.Add(frm);
28                     frm.Show();
29                     frm.Dock = System.Windows.Forms.DockStyle.Fill;
30                     this.Refresh();
31                     foreach (Control item in frm.Controls)
32                     {
33                         item.Focus();
34                         break;
35                     }
36                 }
37                 catch (System.Exception ex)
38                 {
39                     //
40                 }
41             }
42         }

子窗体静态字段

1         /// <summary>
2         /// 子窗体界面单例元素
3         /// </summary>
4         public static Form1 form1 = null;
5         public static Form2 form2 = null;
6         public static Form3 form3 = null;
7         public static Form4 form4 = null;
8         public static Form5 form5 = null;

构造初始化窗体 这里每一个窗体都是一个单例保证窗体的唯一性

1             //实例化子窗体界面
2             form1 = Form1.GetIntance;
3             form2 = Form2.GetIntance;
4             form3 = Form3.GetIntance;
5             form4 = Form4.GetIntance;
6             form5 = Form5.GetIntance;

窗体单例

 1         private static MainForm formInstance;
 2         public static MainForm GetIntance
 3         {
 4             get
 5             {
 6                 if (formInstance != null)
 7                 {
 8                     return formInstance;
 9                 }
10                 else
11                 {
12                     formInstance = new MainForm();
13                     return formInstance;
14                 }
15             }
16         }

初始化按钮状态

 1         private bool initButton()
 2         {
 3             try
 4             {
 5                 this.button1.BackColor = Color.FromArgb(53, 66, 83);
 6                 this.button2.BackColor = Color.FromArgb(53, 66, 83);
 7                 this.button3.BackColor = Color.FromArgb(53, 66, 83);
 8                 this.button4.BackColor = Color.FromArgb(53, 66, 83);
 9                 this.button5.BackColor = Color.FromArgb(53, 66, 83);
10                 this.button6.BackColor = Color.FromArgb(53, 66, 83);
11                 this.button7.BackColor = Color.FromArgb(53, 66, 83);
12                 this.button8.BackColor = Color.FromArgb(53, 66, 83);
13                 this.button9.BackColor = Color.FromArgb(53, 66, 83);
14                 this.button10.BackColor = Color.FromArgb(53, 66, 83);
15                 this.button11.BackColor = Color.FromArgb(53, 66, 83);
16             }
17             catch (Exception ex)
18             {
19                 return false;
20             }
21             return true;
22         }

导航按钮单击切换事件

 1         private void button1_Click(object sender, EventArgs e)
 2         {
 3             try
 4             {
 5                 this.initButton();
 6                 this.button1.BackColor = Color.FromArgb(95, 129, 174);
 7                 Monitor.Enter(this.lockObj);
 8                 if (!formSwitchFlag)
 9                 {
10                     formSwitchFlag = true;
11                     this.ShowForm(pnlCenter,form1);
12                     formSwitchFlag = false;
13                 }
14                 else
15                 {
16                     return;
17                 }
18             }
19             catch (System.Exception ex)
20             {
21                 //
22             }
23             finally
24             {
25                 Monitor.Exit(this.lockObj);
26             }
27         }

最终展现效果图

程序源代码工程文件下载



from:  https://www.cnblogs.com/JiYF/p/9031699.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子 的相关文章

随机推荐

  • mybatis 注解传入 list 集合

    这里写一个查询的sql语句 第一种方式 首先看 mapper SelectProvider type SqlModel class method listDeviceIndex Results value Result column ind
  • Python 设计模式 - 适配器模式

    精通Python设计模式第二版 第 4 章 适配器模式 学习笔记 适配器模式 适配器模式是一种结构型设计模式 能帮助我们使两个不兼容的接口兼容 假设我们想使用function a 作为接口 但是只有function b 则可以使用适配器将f
  • 理解全虚拟、半虚拟以及硬件辅助的虚拟化

    接触过的一些搞了几年云计算的童鞋 也没明白常见的几种虚拟机技术方案的异同 比如只是记住了半虚拟要在虚拟机装驱动而全虚拟不需要 也不知道有时候为什么需要打开BIOS里的VT项 本人呢 在看了各种讲解虚拟化的书籍之后 有些概念虽然不是很清晰 但
  • HashPasswordForStoringInConfigFile 已过时

    https blog csdn net ibenxiaohai123 article details 77453340 https docs microsoft com en us dotnet api system security cr
  • 【ES6】对象的扩展

    文章目录 一 对象的扩展 二 用法详解 1 属性的简洁表示 2 属性名表达式 3 Object is 4 扩展运算符与Object assign 5 in 6 对象的遍历方式 一 对象的扩展 属性的简洁表示法 属性名表达式 Object i
  • Qt-初识

    文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 一 是什么 Qt是一个由Qt Company开发的跨平台C 图形用户界面应用程序开发框架 它既可以开发GUI程序 也可用于开发非GUI程序 比如控制台工具
  • MATLAB 2018中LSTM时间序列分类

    从MATLAB2018a开始 增加了LSTM神经网络工具箱 上图将时序数据分类为categorical 0 或categorical 1 每一行代码解释如下 该时序数据每一个时刻都是一个11维的列向量 隐藏层节点为270 分为两类0或1 构
  • Ciclop horus源码编译

    1 简介 Ciclop是西班牙BQ公司开源的一个DIY 3D扫描仪Horus则是配套开发的3D扫描软件 这款Ciclop是完全开源的 该公司甚至把有关这台3D扫描仪的所有相关机械设计 电子 软件 算法 数学和进行的测试都公布在了开源社区上
  • mysql 参数单位_MySQL参数配置

    参数名称 参数说明 缺省值 最低版本要求 user 数据库用户名 用于连接数据库 所有版本 passWord 用户密码 用于连接数据库 所有版本 useUnicode 是否使用Unicode字符集 如果参数characterEncoding
  • 数据结构学习系列之顺序表的两种删除方式

    方式1 在顺序表的末端删除所存储的数据元素 代码如下 示例代码 int delete seq list 1 list t seq list if NULL seq list printf 入参为NULL n return 1 if 0 se
  • WEB端测试点----整理

    目录 1 功能测试 1 1链接测试 1 2表单测试 1 3数据校验 1 4 cookies测试 1 5数据库测试
  • 【实战】k8s集群中通过docker容器部署Squid正向代理

    1 Squid简介 2 问题描述 3 k8s集群中容器化部署Squid 3 1 环境说明 3 2 在公网节点使用docker安装squid 3 3 配置受信 3 4 修改Squid配置文件 4 代理上网 4 1 为其它节点上的docker配
  • 基于改进 YOLOv5 的小目标检测论文代码复现

    使用yolov5 6 0源码 yolov5x yaml yolov5x pt 1 在主干网络中 加入CBAM 注意力模块增强网络特征提取能力 参考 加入CBAM YOLOv5 v6 0 backbone backbone from numb
  • 病毒相关网址

    病毒命名概述 https www symantec com security center a z https global ahnlab com site securitycenter viruscenter virusList do E
  • 华为snmpv3配置

    华为snmpv3配置 snmp agent 开启SNMP协议 snmp agent community read huawei acl 2001 只读属性为huawei 匹配acl 2001 snmp agent community wri
  • 一:单链表——⑤带环单链表的详细讲解

    今天看了一篇关于带环单链表精讲的文章 在这里给大家做一个总结 之前看过很多有关单链表带环的文章 但是有些文章讲的太文章化 不容易理解 理论性太强 接下来我会用最简单通俗易懂的语言解析这个问题 当你拿到一个单链表的数据信息时 我相信大部分的人
  • crontab执行脚本出错

    最近经常碰到关于crontab不能执行的 初步总结了有以下几个原因 第一 脚本的原因 大多数情况下 是我们的脚本的问题 这种问题导致crontab不能执行的概率占到70 以上 因为程序执行到某一步导致crontab终止执行 如 数据库访问出
  • 冒泡排序的理解

    冒泡排序将数组内的元素进行一定序列的算法 如 1 5 4 6 就变成 1 4 5 6 还可以 6 5 4 1 如何实现 例如 7 23 12 4 13 21 2 17 13 9 1 7与23比较 比较出最值 如果比较最大值 7 lt 23
  • 记录运行tensorflow报错及解决方法

    1 Could not load dynamic library libcudart so 11 0 dlerror libcudart so 11 0 cannot open shared 解决方法 安装cuda 1 下载cuda安装包
  • C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子

    C WinForm父级窗体内Panel容器中嵌入子窗体 程序主窗体设计例子 在项目开发中经常遇到父级窗体嵌入子窗体所以写了一个例子程序 顺便大概划分了下界面模块和配色 不足之处还望指点 主窗体窗体采用前面一篇博客设计扁平化窗体 C 自定义W