WinForm界⾯开发之布局控件WeifenLuo.WinFormsUI.Docking的使
⽤
本篇介绍Winform程序开发中的布局界⾯的设计,介绍如何在我的共享软件中使⽤布局控件"WeifenLuo.WinFormsUI.Docking"。
布局控件"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,如下所⽰
public class BaseForm : DockContent控件的使用
然后每个业务窗⼝继承BaseForm即可。
4、剩下的内容就是如何在主窗体MainForm中展⽰相关的业务窗⼝了,展⽰的代码如下所⽰
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 = "正在展⽰相关的内容";
System.Threading.Thread.Sleep(100);
mainToolWin.Show(this.dockPanel, DockState.DockLeft);
frmComingCall.Show(this.dockPanel);
frmDeliving.Show(this.dockPanel);
frmHistory.Show(this.dockPanel);
frmStock.Show(this.dockPanel);
frmProduct.Show(this.dockPanel);
frmCustomer.Show(this.dockPanel);
frmOrder.Show(this.dockPanel);
SplashScreen.Splasher.Status = "初始化完毕";
System.Threading.Thread.Sleep(50);
SplashScreen.Splasher.Close();
}
5.下⾯贴出基本窗⼝的基本操作事件函数
private void menu_Window_CloseAll_Click(object sender, EventArgs e) {
CloseAllDocuments();
}
private void menu_Window_CloseOther_Click(object sender, EventArgs e) {
if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi)
{
Form activeMdi = ActiveMdiChild;
foreach (Form form in MdiChildren)
{
if (form != activeMdi)
{
form.Close();
}
}
}
else
{
foreach (IDockContent document in dockPanel.DocumentsToArray()) {
if (!document.DockHandler.IsActivated)
{
document.DockHandler.Close();
}
}
}
}
private DockContent FindDocument(string text)
{
if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi)
{
foreach (Form form in MdiChildren)
{
if (form.Text == text)
{
return form as DockContent;
}
}
return null;
}
else
{
foreach (DockContent content in dockPanel.Documents)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论