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

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

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

C#自定义Winform无边框窗体

主要思路

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

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

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

         /// <summary>
/// 显示窗体
/// </summary>
/// <param name="panel"></param>
/// <param name="frm"></param>
public void ShowForm(System.Windows.Forms.Panel panel, System.Windows.Forms.Form frm)
{
lock (this)
{
try
{
if (this.currentForm != null && this.currentForm == frm)
{
return;
}
else if (this.currentForm != null)
{
if (this.ActiveMdiChild != null)
{
this.ActiveMdiChild.Hide();
}
}
this.currentForm = frm;
frm.TopLevel = false;
frm.MdiParent = this;
panel.Controls.Clear();
panel.Controls.Add(frm);
frm.Show();
frm.Dock = System.Windows.Forms.DockStyle.Fill;
this.Refresh();
foreach (Control item in frm.Controls)
{
item.Focus();
break;
}
}
catch (System.Exception ex)
{
//
}
}
}

子窗体静态字段

         /// <summary>
/// 子窗体界面单例元素
/// </summary>
public static Form1 form1 = null;
public static Form2 form2 = null;
public static Form3 form3 = null;
public static Form4 form4 = null;
public static Form5 form5 = null;

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

             //实例化子窗体界面
form1 = Form1.GetIntance;
form2 = Form2.GetIntance;
form3 = Form3.GetIntance;
form4 = Form4.GetIntance;
form5 = Form5.GetIntance;

窗体单例

         private static MainForm formInstance;
public static MainForm GetIntance
{
get
{
if (formInstance != null)
{
return formInstance;
}
else
{
formInstance = new MainForm();
return formInstance;
}
}
}

初始化按钮状态

         private bool initButton()
{
try
{
this.button1.BackColor = Color.FromArgb(, , );
this.button2.BackColor = Color.FromArgb(, , );
this.button3.BackColor = Color.FromArgb(, , );
this.button4.BackColor = Color.FromArgb(, , );
this.button5.BackColor = Color.FromArgb(, , );
this.button6.BackColor = Color.FromArgb(, , );
this.button7.BackColor = Color.FromArgb(, , );
this.button8.BackColor = Color.FromArgb(, , );
this.button9.BackColor = Color.FromArgb(, , );
this.button10.BackColor = Color.FromArgb(, , );
this.button11.BackColor = Color.FromArgb(, , );
}
catch (Exception ex)
{
return false;
}
return true;
}

导航按钮单击切换事件

         private void button1_Click(object sender, EventArgs e)
{
try
{
this.initButton();
this.button1.BackColor = Color.FromArgb(, , );
Monitor.Enter(this.lockObj);
if (!formSwitchFlag)
{
formSwitchFlag = true;
this.ShowForm(pnlCenter,form1);
formSwitchFlag = false;
}
else
{
return;
}
}
catch (System.Exception ex)
{
//
}
finally
{
Monitor.Exit(this.lockObj);
}
}

最终展现效果图

程序源代码工程文件下载

小伙伴们直接去这里下载: https://files.cnblogs.com/files/JiYF/GUIDesign.rar

复制到浏览器即可下载

 或者博客留言,给出邮箱!基本一天内可以回复,就酱紫,爱你们呦,么么哒!O(∩_∩)O

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

  1. Qt界面中嵌入其他exe程序的界面,使用Qt5

    下面用一个小例子来演示如何在Qt的界面中嵌入其他exe程序的界面,最终效果如下图所示.本文参考了 http://blog.csdn.net/jiaoyaziyang/article/details/4 ...

  2. 接下来将介绍C#如何设置子窗体在主窗体中居中显示,本文提供详细的操作步骤,需要的朋友可以参考下

    接下来将介绍C#如何设置子窗体在主窗体中居中显示,本文提供详细的操作步骤,需要的朋友可以参考下 其实表面上看是很简单的 开始吧,现在有两个窗体Form1主窗体,Form2子窗体 而且我相信大部分人都会 ...

  3. wpf 子窗体调用主窗体中函数的实现

    子窗体(Win_Set): MainWindow m;                m = (MainWindow)this.Owner;                m.showText(&qu ...

  4. c#在主窗体panel 容器内嵌入另一个窗体(子窗体)的实现

    主窗体:  子窗体: 把子窗体嵌入到主窗体的panel 右侧中: 代码: { public MainForm() { InitializeComponent(); } private void Clo ...

  5. WPF中嵌入普通Win32程序的方法

    公司现在在研发基于.Net中WPF技术的产品,由于要兼容旧有产品,比如一些旧有的Win32程序.第三方的Win32程序等等,还要实现自动登录这些外部Win32程序,因此必须能够将这些程序整合到我们的系 ...

  6. Docker容器中安装新的程序

    在容器里面安装一个简单的程序(ping). 之前下载的是ubuntu的镜像,则可以使用ubuntu的apt-get命令来安装ping程序:apt-get install -y ping. $docke ...

  7. Unity容器中AOP应用示例程序

    转发请注明出处:https://www.cnblogs.com/zhiyong-ITNote/p/9127001.html 实在没有找到Unity容器的AOP应用程序示例的说明,在微软官网找到了教程( ...

  8. 2017-11-29 由runnable说起Android中的子线程和主线程

    1.首先纠正一个观点,就是runnable运行在子线程中是错误的观念.runnable只是创建了一个执行任务的对象,但是它本身并不会创建一个新的子线程,Runable只是给你接口让你实现工作线程的工作 ...

  9. C#设置窗体中的窗体随主窗体大小变化而变化

    form2 f=new form2(); f.Size=this.Size; f.Location=this.Location; f.showdialog(); 作者:耑新新,发布于  博客园 转载请 ...

随机推荐

  1. elastic-job详解(三):Job的手动触发功能

    elastic-job的任务都是使用quartz来触发的,quartz表达式一般都是定期执行.但有时候一些周期较长的任务,比如一天一次,几小时一次的任务,我们需要等待很久才能触发一次.如果我们需要测试 ...

  2. JAVA自学笔记09

    JAVA自学笔记09 1.子类的方法会把父类的同名方法覆盖(重写) 2.final: 1)可修饰类.方法.变量 2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承 3)修饰方法时:该方法将无法 ...

  3. Mac/Ubuntu下的数据建模工具PDMan,替代PowerDesigner

    PowerDesigner我使用过用Wine在Linux和Mac下用,但总有些缺陷,用Navicat却发觉没有Linux版本的: 一般关心的问题主要有如下: 1.数据库的关系设计图. 2.导出数据库脚 ...

  4. python接口自动化29-requests-html支持JavaScript渲染页面

    前言 requests虽好,但有个遗憾,它无法加载JavaScript,当访问一个url地址的时候,不能像selenium一样渲染整个html页面出来. requests-html终于可以支持Java ...

  5. 【转】Selenium - 封装WebDrivers (C#)

    本文转载自:http://www.cnblogs.com/qixue/p/3977135.html Web element仍然使用OpenQA.Selenium.IWebElement, 本类库将Se ...

  6. MySQL DBA工作角色和职责介绍

    MySQL DBA分架构DBA,运维DBA和开发DBA三种角色,职责介绍如下:

  7. Javascript正则表达入参是null

    今天群友问了一个问题,如下的执行结果是什么? var reg = /^[a-z0-9\u4e00-\u9fa5]{0,15}$/; console.log(reg.test(null)); // tr ...

  8. 第六周周赛——AK机会不易得,好好把握题解(出自HDU5650,codeforces 616A,624A,659A,655A,658A)

    A题: A题题目链接 题目描写叙述: 位运算 TimeLimit:1000MS  MemoryLimit:65536KB 64-bit integer IO format:%I64d Problem ...

  9. ChartControl控件0和null的效果

    DevExpress的ChartControl虽然还不能完全代替Office图表(例如它暂时不支持添加数据表),但它算同类产品中相当优秀的了,下面是对0值和空值的处理. DataTable zeroD ...

  10. .Net混淆工具和反混淆工具

    一.简介 本文给大家列举一些常用的.net程序反破解代码混淆工具.同时也列取一些反混淆工具. 二.混淆工具 Agile.NET (aka CliSecure) Babel.NET CodeFort C ...