C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子
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容器中嵌入子窗体、程序主窗体设计例子的更多相关文章
- Qt界面中嵌入其他exe程序的界面,使用Qt5
下面用一个小例子来演示如何在Qt的界面中嵌入其他exe程序的界面,最终效果如下图所示.本文参考了 http://blog.csdn.net/jiaoyaziyang/article/details/4 ...
- 接下来将介绍C#如何设置子窗体在主窗体中居中显示,本文提供详细的操作步骤,需要的朋友可以参考下
接下来将介绍C#如何设置子窗体在主窗体中居中显示,本文提供详细的操作步骤,需要的朋友可以参考下 其实表面上看是很简单的 开始吧,现在有两个窗体Form1主窗体,Form2子窗体 而且我相信大部分人都会 ...
- wpf 子窗体调用主窗体中函数的实现
子窗体(Win_Set): MainWindow m; m = (MainWindow)this.Owner; m.showText(&qu ...
- c#在主窗体panel 容器内嵌入另一个窗体(子窗体)的实现
主窗体: 子窗体: 把子窗体嵌入到主窗体的panel 右侧中: 代码: { public MainForm() { InitializeComponent(); } private void Clo ...
- WPF中嵌入普通Win32程序的方法
公司现在在研发基于.Net中WPF技术的产品,由于要兼容旧有产品,比如一些旧有的Win32程序.第三方的Win32程序等等,还要实现自动登录这些外部Win32程序,因此必须能够将这些程序整合到我们的系 ...
- Docker容器中安装新的程序
在容器里面安装一个简单的程序(ping). 之前下载的是ubuntu的镜像,则可以使用ubuntu的apt-get命令来安装ping程序:apt-get install -y ping. $docke ...
- Unity容器中AOP应用示例程序
转发请注明出处:https://www.cnblogs.com/zhiyong-ITNote/p/9127001.html 实在没有找到Unity容器的AOP应用程序示例的说明,在微软官网找到了教程( ...
- 2017-11-29 由runnable说起Android中的子线程和主线程
1.首先纠正一个观点,就是runnable运行在子线程中是错误的观念.runnable只是创建了一个执行任务的对象,但是它本身并不会创建一个新的子线程,Runable只是给你接口让你实现工作线程的工作 ...
- C#设置窗体中的窗体随主窗体大小变化而变化
form2 f=new form2(); f.Size=this.Size; f.Location=this.Location; f.showdialog(); 作者:耑新新,发布于 博客园 转载请 ...
随机推荐
- mysql trigger
转自:https://www.cnblogs.com/zyshi/p/6618839.html 阅读目录 什么是触发器 特点及作用 例子:创建触发器,记录表的增.删.改操作记录 弊端 什么是触发器 简 ...
- 如何实现织梦dedecms表单提交时发送邮箱功能【已解决】
我们通过织梦系统制作网站时,很多客户需要有在线留言功能,这时就会用到自定义表单.但是很多用户觉得经常登陆后台查看留言信息太麻烦了,于是想能否在提交留言是直接把内容发送到指定邮箱.网站经过测试终于实现了 ...
- bootstrap常见的面试题
1. 如果让一个元素在pc端显示而在手机端隐藏,下列选项正确的是(b). A. visible-xs-8 hidden-md B. visible-md-8 hidden-xs C. visibl ...
- java内部类(一)
内部类(一) 一.定义: 内部类就是定义在另一个类内部的类,与之对应,包含内部类的类就是外部类. 二.作用: 1.内部类提供更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包之中的其他类访问该类 ...
- 常见问题1:默认div隐藏,点击按钮时出现,再点击时隐藏。
例:默认div隐藏,点击按钮时出现,再点击时隐藏. <a href="#" onclick="f('ycbc')"; >控制按钮</a> ...
- python下的selenium和PhantomJS
一般我们使用python的第三方库requests及框架scrapy来爬取网上的资源,但是设计javascript渲染的页面却不能抓取,此时,我们使用web自动化测试化工具Selenium+无界面浏览 ...
- [C#] .NET Core/Standard 1.X 项目中如何使用XmlIgnoreAttribute等标准范围外的内容,兼谈如何解决“violation of security transparency rules failed”(违反安全透明规则失败)异常
作者: zyl910 一.缘由 XML序列化是一个很常用的功能,但对于.NET Core/Standard,其直到2.0版才内置支持XML序列化.具体来说, .NET Core 2.0 或 .NET ...
- string与stringBuffer区别
string 的 “+” 操作就是根据 StringBuilder (或 StringBuffer )类及其 append 方法实现的. String 不可变其实就是说一个 String 对象创建之后 ...
- Mongodb系列- CRUD操作介绍
---恢复内容开始--- 一 Create 操作 在MongoDB中,插入操作的目标是一个集合. MongoDB中的所有写入操作在单个文档的层次上都是原子的. For examples, see In ...
- Redis数据结构详解,五种数据结构分分钟掌握
redis数据类型分为:字符串类型.散列类型.列表类型.集合类型.有序集合类型.redis这么火,它运行有多块?一台普通的笔记本电脑,可以在1秒钟内完成十万次的读写操作.原子操作:最小的操作单位,不能 ...