dockpane用法总结来自网络Word下载.docx
- 文档编号:17596591
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:19
- 大小:563.88KB
dockpane用法总结来自网络Word下载.docx
《dockpane用法总结来自网络Word下载.docx》由会员分享,可在线阅读,更多相关《dockpane用法总结来自网络Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
5.将dockPanel拖到窗体Form1上,设置Dock属性,我设置的是:
Fill。
停靠窗体:
1.新建一个WinForm窗体Form2。
2.在代码中修改窗体继承于DockContent。
publicpartialclassForm2:
DockContent
{
Form1form1;
privateDockPaneldp;
publicForm2()
InitializeComponent();
}
publicForm2(Form1fm1)
form1=fm1;
dp=(DockPanel)form1.Controls["
dockPanel1"
];
3.在主窗体Form1中显示停靠窗体。
privatevoidForm1_Load(objectsender,EventArgse)
{
Form2form2=newForm2();
form2.Show(this.dockPanel1,DockState.DockLeft);
}
dockpanel中其他几个类
DockWindow:
用来划分dockpanel.
在一个DockPanel上面还有几个DockWindow把DockPanel分成了几块.默认DockPanel用DockWindow创建了五个区域,分别是DockTop,DockBottom,DockLeft,DockRight和Document,任何一个DockPane都棣属于这五个区域中的某一个.DockPanel就是通过DockWindow来管理DockPane的所在位置的.
DockPane:
DockPanelSuit的一个基本显示单元,最终用户看到的UI都是由DockPane组合而来的
FloatWindow:
事实上,FloatWindow跟DockPane是同等的,只不过DockPane是附在DockWindow上,而FloatWindow是一个浮动窗口而已.显然,FloatWindow是一个Form,DockPanel管理着FloatWindow跟DockPane之间的转换,而这个转换过程也无非就是把DockContent从FloatWindow转到DockPane上,或者把DockContent从DockPane转到FloatWindow上,然后显示出来
DockPanel的使用
.Net2008WinForm开发2009-12-0314:
381157人阅读评论(0)收藏举报
DockPanel的使用
2009-12-03
3.设置Form1窗体属性IsMdiContainer:
True。
usingWeifenLuo.WinFormsUI.Docking;
publicpartialclassForm2:
DockContent
privatevoidForm1_Load(objectsender,EventArgse)
{
form2.Show(this.dockPanel1);
如果dockPanel嵌套在另1个容器控件上(如:
panel),将dockPanel属性DocumentStyle设置为:
DockingWindow/DockingSdi
Dockpanel使用技巧
C#2012-01-3122:
3333人阅读评论(0)收藏举报
DockPanel的基本使用我就不说了,网上很多,我想说的是在使用DockPanel时需要注意的几个小问题
第一个:
使用过DockPanel的人,都有可能会遇到这样一个错误:
InvalidContent:
ActiveContentmustbeoneofthevisiblecontents,ornullifthereisnovisiblecontent.
翻译过来的意思大致是:
无效的内容:
如果没有一个可见的内容,ActiveContent必须是可见的内容或空。
具体是什么原因,大家可以相互探讨下。
下面我说说出现这个问题的几种情况
代码中的this关键字代表的就是Dockpanel所在的窗体为Form1
1)、当Dockpanel的DocumentStyle不为DockingMdi时,以下代码会出现这个问题
Frm_AfrmA=null;
//判断子窗体中是否已经存在在DockPanel中
foreach(DockContentfrminthis.dockPanel1.Contents)
if(frmisFrm_A)
frm.Activate();
//激活子窗体
return;
}
frmA=newFrm_A();
frmA.MdiParent=this;
frmA.Show(this.dockPanel1);
解决方案:
看你设置Dockpanel的DocumnetStyle是否为DockingMdi。
大家也可以试试其他几种方式(DockingWindow,DockingSdi,SystemMdi)
2)、设置了Dockpanel的DocumentStyle不为DockingMdi时,如果你想要设置窗体Frm_B为左边浮动窗体,需要设置窗体Frm_B的DockAreas为且仅为DockLeft,如果想要实现其他功能可自行去设置其他属性信息,现在请看下面代码
Frm_BfrmB=null;
if(frmisFrm_B)
frmB=newFrm_B();
//frmB.MdiParent=this;
frmB.Show(this.dockPanel1,DockState.DockLeft);
注意,如果你在你的代码中加了红色注释的代码,那么程序运行时也会报上面的那个错
注释红色的代码。
原因:
(个人理解)frmB.Show(this.dockPanel1,DockState.DockLeft);
这句代码其实就设置了frmB只停靠在DockPanel左边,此时的frmB是不属于MDI子窗体的,所以一旦你加入红色的代码,程序就会报错。
第二个:
拖动、停靠、固定子窗体(显示在Dockpanel中)
拖动:
如果你想使你的子窗体可以任意拖动,那么你在设置子窗体的DockAreas属性时,保持默认值,不要修改。
停靠:
首先你需设置DockAreas的位置,可以停靠在左、右、下等,也可以通过程序代码控制,参考上面代码。
固定:
只需设置你窗体的DockAreas为Document就行了
第三个:
子窗体和Contents的判断
很多时候你需要判断Dockpanel中存在多少个子窗体或Contents,请参考下面代码:
foreach(Forminthis.MdiChildren)
//这样判断时,停靠的窗体是不会计算在内的
而
foreach(DockContentfrminthis.dockPanel1.Contents)
//这样设置后,所有的继承与DockContent的窗体都会被计算在内的
第四个:
寻找主窗体、动态显示子窗体
参考图:
实现的功能:
这里我们需要实现,右键点击A窗体,通过右键菜单来显示窗体B。
//主窗体的对象
privatevoidshowB_Click(objectsenders,EventArgse)
GetFrmMain();
//通过此函数来获取form1
foreach(Formfrminform1.MdiChildren)
Frm_BfrmB=newFrm_B(this);
frmB.MdiParent=form1;
frmB.Show(form1.dockPanel1);
privatevoidGetFrmMain()
if(this.Parent.Parent.Parent.Parent!
=null)
form1=(Form1)this.Parent.Parent.Parent.Parent;
else
form1=(Form1)this.Parent.Parent.Parent;
现在是在A窗体中,this关键字已经代码的不是主窗体了,那么这里我们就需要获取主窗体对象
当A窗体停靠时,需要this.Parent.Parent.Parent.Parent(四个)
不停靠时,只需要三个this.Parent.Parent.Parent
调试代码发现:
停靠时
this.Parent为{WeifenLuo.WinFormsUI.Docking.DockPane}
this.Parent.Parent为{WeifenLuo.WinFormsUI.Docking.DockWindow,BorderStyle:
System.Windows.Forms.BorderStyle.None}
this.Parent.Parent.Parent为{WeifenLuo.WinFormsUI.Docking.DockPanel,BorderStyle:
this.Parent.Parent.Parent为{TestEvenhandler.Form1,Text:
Form1}就是我们要找的主窗体Form1
不停靠时:
this.Parent.Parent为{WeifenLuo.WinFormsUI.Docking.DockPanel+AutoHideWindowControl,BorderStyle:
DockPanel使用方法
DockPanel有人曰浮动窗体,也就是c#编辑器的样式,如下图:
浮动窗体可以浮动、停靠(上下左右)、分页(如上图的档案录入页面)。
以下记录以下使用方法:
(1)首先找到WeifenLuo.WinFormsUI.Docking.dll,下载WeifenLuo.WinFormsUI.Docking.dll组建(点击下载)。
(2)把该组建添加到引用,创建窗体1为主窗体,窗体2、窗体3为子窗体。
把dockpanle工具添加上。
(3)主窗体代码:
把dockpanle拖放到主窗体,添加代码dockPanel1.DocumentStyle=DocumentStyle.DockingMdi;
(4)子窗体:
子窗体继承自:
WeifenLuo.WinFormsUI.Docking.DockContent,不是继承自form;
定义子窗体对象
form1f1=newform1();
f1.ShowHint=DockState.Document;
f1.Show(dockPanel1);
显示效果即得到。
另外也记录下状态,下次打开时候任然保持,用以下方法加载记录状态:
(1)privateDeserializeDockContentddc;
(2)privateIDockContentGetContentFromPersistString(stringpersistString)
if(persistString==typeof(f1).ToString())
returnf1;
if(persistString==typeof(f2).ToString())
returnf2;
returnnull;
(3)
stringconfigFile=Path.Combine(Path.GetDirectoryName(Application.ExecutablePath),"
DockPanel.config"
);
if(File.Exists(configFile))
dockPanel1.LoadFromXml(configFile,ddc);
ddc=newDeserializeDockContent(GetContentFromPersistString);
以上方法加载保存的状态,
dockPanel1.SaveAsXml(configFile);
另外,要实现各个dockpanle子窗体之间的互动,例如,vs编辑器中,设计界面的时候,选择一个文本框,属性框中的属性随之改变,使用委托可以解决,可以参看本博客的委托应用1.
布局控件"
WeifenLuo.WinFormsUI.Docking"
是一个非常棒的开源控件,用过的人都深有体会,该控件之强大、美观、不亚于商业控件。
而且控件使用也是比较简单的。
先看看控件使用的程序界面展示效果。
配电网络可视化管理系统的界面截图:
图片看不清楚?
请点击这里查看原图(大图)。
深田之星送水管理系统网络版的界面截图:
我在几个共享软件都使用了该布局控件,我们先以“深田之星送水管理系统网络版”这款软件为例,介绍如何完成该界面的设计及显示的。
1、首先,我们添加一个主界面窗体,命名为MainForm,该窗体IsMdiContainer设置为True,也就是设置为多文档窗体格式。
拖拉布局控件"
WeifenLuo.WinFormsUI.Docking.DockPanel"
到主窗体MainForm中,并设置下面几个属性:
Dock为Fill、DocumentStyle为DockingMdi、RightToLeftLayout为True。
这几个属性的意思应该不难,Dock就是 覆盖整个MDI窗体的区域,DocumentStyle为多文档类型、RightToLeftLayout是指新打开的窗口都停靠在右边区域。
我们看看设计界面视图如下所示。
2、主界面其实基本上就可以了,另外我们看到“送水管理系统网络版”的界面中有一个左边的工具栏,它其实也是在一个停靠的窗体中的,我们增加一个窗体用来承载相关的工具快捷键按钮展示。
命名为MainToolWindow的窗体,继承自WeifenLuo.WinFormsUI.Docking.DockContent.
其中的“HideOnClose”属性很重要,该属性一般设置为True,就是指你关闭窗口时,窗体只是隐藏而不是真的关闭。
左边的窗口MainToolWindow实现停靠的代码是在MainForm的构造函数或者Load函数中加载即可。
mainToolWin.Show(this.dockPanel,DockState.DockLeft);
3、对于工具窗口我们已经完成了,但是主业务窗口还没有做,也就是下面的部分内容。
为了方便,我们定义一个基类窗体,命名为BaseForm,继承自DockContent,如下所示
publicclassBaseForm:
然后每个业务窗口继承BaseForm即可。
4、剩下的内容就是如何在主窗体MainForm中展示相关的业务窗口了,展示的代码如下所示
双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public partial class MainForm :
Form
{
#region 属性字段
private MainToolWindow mainToolWin = new MainToolWindow();
private FrmProduct frmProduct = new FrmProduct();
private FrmCustomer frmCustomer = new FrmCustomer();
private FrmOrder frmOrder = new FrmOrder();
private FrmStock frmStock = new FrmStock();
private FrmComingCall frmComingCall = new FrmComingCall();
private FrmDeliving frmDeliving = new FrmDeliving();
private FrmTicketHistory frmHistory = new FrmTicketHistory();
#endregion
public MainForm()
{
InitializeComponent();
SplashScreen.Splasher.Status = "
正在展示相关的内容<
IMGsrc="
width=15height=20>
"
;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dockpane 用法 总结 来自 网络
![提示](https://static.bdocx.com/images/bang_tan.gif)