C# Dockpanel入门基础必看篇
作者:Lc1996Jm 发布时间:2023-02-24 18:50:42
一、引用:
1.建立一个WinForm工程,默认生成了一个WinForm窗体Form1(此处默认为主窗体)。
2.引用—>添加引用—>浏览—>weiFenLuo.winFormsUI.Docking.dll。
3.设置Form1窗体属性IsMdiContainer:True。
4.工具箱—>右键—>选择项—>.net组件—>浏览—>weiFenLuo.winFormsUI.Docking.dll—>在工具箱出现dockPanel。
5.将dockPanel拖到窗体主窗体上,设置Dock属性,一般默认设置为:Fill。
二、设置停靠窗体:
1.新建一个WinForm窗体。
2.在代码中修改窗体继承于DockContent。如下:
using WeifenLuo.WinFormsUI.Docking;
public partial class Form2 : DockContent
3.在主窗体中显示停靠窗体。
在要显示停靠窗体的事件中写入以下代码:
Private void 事件名(){
Form2 form2 = new Form2();
form2.Show(停靠的父容器,DockState.要停靠的方位);
}
三、设置窗体浮动:
1、设置需要浮动的窗体的Dock中的DockAreas属性。
四、关闭当前容器中的所有窗体
1、获取到当容器中的所有子窗体的个数:
dockPanel1.Contents.Count;
2、获取容器中的所有对象的数组,并将其转换为
IDockContent对象:
IDockContent content =(IDockContent)dockPanel1.Contents[index];
3、循环关闭:
for (int index = dockPanel1.Contents.Count;index > 0; index--)
{
if(dockPanel1.Contents[index] isIDockContent)
{
IDockContent content =(IDockContent)dockPanel1.Contents[index];
content.DockHandler.Close();}}
五、关闭除当前正在活动的子窗体之外得到所有子窗体:
1、获取当前正在活动的子窗体对象:
this.ActiveMdiChild;
2、遍历容器中的子窗体,并判断是否为当前正在活动的窗体,不是则关闭:
if (this.ActiveMdiChild != null)
{ //判断是否有子窗体
foreach (Form f in this.MdiChildren)
{//获取子窗体
if (f != this.ActiveMdiChild) { f.Close(); }//判断是否为当前选定窗口
}
}
六、更改窗体风格:
1、下载要设置风格的资源库或相关控件。例如: vS2005Theme、vS2003Theme、vS2012LightTheme;
然后将要更改风格的DockPanel控件的Theme属性设置为相应的控件名。例:
dockPanel1.Theme = vS2003Theme2;
如果要更改主窗体的风格,则要下载vS2012ToolStripExtender控件。
vS2012ToolStripExtender1.SetEnableVS2012Style(要更改的控件, true);
七、更改窗体的样式:
1.获取并记录当前样式:
DocumentStyle oldStyle = dockPanel1.DocumentStyle;//记录旧的样式
2.定义新样式对象并为其赋值要更改的样式:
DocumentStyle newStyle=要更改的样式(DocumentStyle.样式);
3、设置新的样式:
要更改样式的窗体.
DocumentStyle=newStyle;
八、记录当前窗体布局:
1.定义一个正在窗体关闭事件:
private void MainForm_FormClosing(object sender FormClosingEventArgse){
..........
}
2.在事件在写入记录当前窗体布局的代码,如下:
configFile =Path.Combine(Path.GetDirectoryName(Application.ExecutablePath),"DockPanel.config");
dockPanel1.SaveAsXml(configFile);
3、如果下载打开窗体需要加载上一次的退出时的布局,则在窗体加载事件中写入以下代码:
configFile =Path.Combine(Path.GetDirectoryName(Application.ExecutablePath),"DockPanel.config");
if(File.Exists(configFile))
{
dockPanel1.LoadFromXml(configFile, ddc);
}
补充知识:winform DockPanel的用法
DockPanel中提供了几个可用的类,重要的有两个:DockPanel和DockContent。
DockPanel是从panel继承出来的,用于提供可浮动的dock的子窗口进行浮动和dock的场所, DockContent是从form类中继承出来的,用于提供可浮动的窗口基类.就是说: DockContent对象可以在DockPanel对象中任意贴边,浮动, TAB化等。
WeifenLuo.WinFormsUI.Docking.dll的使用方法:
1.建立一个WinForm工程,默认生成了一个WinForm窗体Form1;
2.引用—>添加引用—>浏览—>WeifenLuo.WinFormsUI.Docking.dll,最好是先把WeifenLuo.WinFormsUI.Docking.dll拷贝到项目目录下面,方便以后创建安装文件;
3.设置窗体(Form1)属性IsMdiContainer为True;
4.工具箱—>右键—>选择项—>.net组件—>浏览—>WeifenLuo.WinFormsUI.Docking.dll—>在工具箱出现dockPanel;
5.将DockPanel拖到窗体Form1上,设置Dock属性,我设置的是:Fill;
6.新建一个WinForm窗体,如:数据集信息左侧;
7.设置JReductBtree压缩树类继承DockContent,public partial class 数据集信息左侧 : DockContent
8.在JReductBtree压缩树类中添加using WeifenLuo.WinFormsUI.Docking;
9.在主窗体Form1中显示停靠窗体,代码如下:
public void MainWindow_Load(object sender, EventArgs e)
{
数据集信息左侧 tingkaoLeftWindow = new 数据集信息左侧();
tingkaoLeftWindow.Show(this.dockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockLeft);
数据集内容 shujujiLoad = new 数据集内容();
shujujiLoad.Show(this.dockPanel1);
}
说明:
tingkaoLeftWindow.Show(this.dockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockLeft);
表示打开主窗体的时候 tingkaoLeftWindow 在主窗体的左边显示;
shujujiLoad.Show(this.dockPanel1);
表示 shujujiLoad 作为标签页显示。
运行后的样式如下图:
来源:https://blog.csdn.net/Lc1996Jm/article/details/51881064


猜你喜欢
- SQLite分析 SQLite是轻量级的、嵌入式的、关系型数据库,
- 想要实现一个功能:同一个用户在两个不同的浏览器中登录,后面的踢掉之前的登录。本来的思路是在httpSession * 中进行判断。但是在使用
- 本文实例为大家分享了Android实现简易QQ界面的具体代码,供大家参考,具体内容如下要求: (1)与QQ界面控件数目、样式相同 (2)与Q
- 前言fragment 可认为是一个轻量级的Activity,但不同与Activity,它是要嵌到Activity中来使用的,它用来解决设备屏
- springboot 无法自动装配@Autowired 报错:无法自动装配基本上是因为1、项目里有类似mybatis @Mapper这种第三
- java常量池技术java中常量池技术说的通俗点就是java级别的缓存技术,方便快捷的创建一个对象。当需要一个对象时,从池中去获取(如果池中
- 当前使用的IDEA版本是2020.1。随着IDEA版本的升级,有些插件不再支持,而有些插件变成了收费插件,这些插件将不再推荐。以下列举的,都
- md5 属于hash算法一类,是不可逆的消息摘要算法。与对称加密和非对称加密算法不一样,不需要加密密钥。注意:md5不是加密算法,只是将数据
- 1. 前言什么是特殊矩阵?C++,一般使用二维数组存储矩阵数据。在实际存储时,会发现矩阵中有许多值相同的数据或有许多零数据,且分布呈现出一定
- 目录1.C 语言包含的数据类型2.C语言的基本数据类型3.示例代码1.C 语言包含的数据类型如下图所示:2.C语言的基本数据类型short、
- 本文实例讲述了JAVA实现的简单万年历。分享给大家供大家参考,具体如下:import java.util.Scanner;public cl
- 1 C++类型转换本质1.1 自动类型转换(隐式)利用编译器内置的转换规则,或者用户自定义的转换构造函数以及类型转换函数(这些都可以认为是已
- 我是因为构建多渠道包的时候有这个需求,平常工作多个渠道包频繁的打包,总会忘记versioncode提高一下,从而打包出来的apk无法覆盖原先
- 前言开发中很多需要javac 的程序依赖 JAVA_HOME环境变量.如果是手工下载源码安装的JDK,很容易知道JAVA_HOME的目录.
- 本文实例为大家分享了Android实现图片点击放大的具体代码,供大家参考,具体内容如下在我的项目中,有点击图片banner后放大浏览的功能。
- 一、简介相信大家用eclipse上的模拟器会觉得很慢很卡,这里给大家介绍个好东西安卓模拟器genymotion。了解更多,可到此网站http
- 前言在之前我们分析 Tomcat catalina.bat 原理解析 时候,我们发现在启动tomcat的参数中存在 -Djava.
- 集成引入依赖在项目的pom.xml中增加以下依赖<dependency> <groupId>org.s
- 本文实例为大家分享了C#实现猜数字游戏具体代码,供大家参考,具体内容如下给定一个0-100的随机数字猜其大小题目样式:电脑产生一个0到100
- C#调用C++ dll string类型返回为了这个问题,百度了一堆不靠谱的资料,什么C#调用c++类型对应啥的,说用string ,Str