• c#——开源控件——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)
                    {
                        if (content.DockHandler.TabText == text)
                        {
                            return content;
                        }
                    }

                    return null;
                }
            }

            public DockContent ShowContent(string caption, Type formType)
            {
                DockContent frm = FindDocument(caption);
                if (frm == null)
                {
                    frm = ChildWinManagement.LoadMdiForm(Portal.gc.MainDialog, formType) as DockContent;
                }

                frm.Show(this.dockPanel);
                frm.BringToFront();
                return frm;
            }

            public void CloseAllDocuments()
            {
                if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi)
                {
                    foreach (Form form in MdiChildren)
                    {
                        form.Close();
                    }
                }
                else
                {
                    IDockContent[] documents = dockPanel.DocumentsToArray();
                    foreach (IDockContent content in documents)
                    {
                        content.DockHandler.Close();
                    }
                }
            } 
    复制代码

    最后呈上该控件文件,大家可以下来玩玩。

    http://files.cnblogs.com/wuhuacong/WeifenLuo.WinFormsUI.Docking.rar

    主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
    专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
  • 相关阅读:
    1.27
    1.25
    Representation Learning with Contrastive Predictive Coding
    Learning a Similarity Metric Discriminatively, with Application to Face Verification
    噪声对比估计(负样本采样)
    Certified Adversarial Robustness via Randomized Smoothing
    Certified Robustness to Adversarial Examples with Differential Privacy
    Dynamic Routing Between Capsules
    Defending Adversarial Attacks by Correcting logits
    Visualizing Data using t-SNE
  • 原文地址:https://www.cnblogs.com/eve612/p/14292437.html
Copyright © 2020-2023  润新知