首页 > 编程语言 >C#设置DockPanelSuit布局

C#设置DockPanelSuit布局

时间:2023-10-31 15:13:36浏览次数:41  
标签:Form2 C# 布局 dockPanel1 System form3 form2 using DockPanelSuit

1、下载Nuget包,并安装

 

2、工具箱中拖入如下两个工具到界面

 3、设置DockPanelSuite属性

 4、更改子窗体代码,若Form2为子窗体,则将其继承Form改为DockContent

 

5、实现Form2每次显示在Form1内,可以更改DockState实现设置停靠位置

 

 6、同Form2一样,再设置Form3

 7、实现Form2和Form3显示在Form1的DockPanel中

 8、保存配置文件到本栋,以及从本地加载界面配置,设置默认窗体布局

查看代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;

namespace 测试DockPanelSuite设计界面
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }





        Form2 form2;
        Form3 form3;
        private string m_DockPath = "";

        private void 加载布局_Click(object sender, EventArgs e)
        {
            initFormsLayout();
        }


        private void 打开窗体_Click(object sender, EventArgs e)
        {
            if (form2 != null && !form2.IsDisposed) { }  //已经打开
            else
            {
                form2 = new Form2();
            }
            form2.Show(dockPanel1, DockState.DockLeft);

            if (form3 != null && !form3.IsDisposed) { }  //已经打开
            else
            {
                form3 = new Form3();
            }
            form3.Show(dockPanel1, DockState.DockLeft);
        }

        private void 默认布局_Click(object sender, EventArgs e)
        {
            ShowDefaultLayout();
        }

        private void 保存布局_Click(object sender, EventArgs e)
        {
            save();
        }

        /// <summary>
        /// 加载窗体布局
        /// </summary>
        void initFormsLayout()
        {
            form2 = new Form2();
            form3 = new Form3();
            dockPanel1.Visible = true;
            m_DockPath = "DockPanel.config";
            InitDockPanel(m_DockPath);
        }
        private IDockContent GetContentFromPersistString(string persistString)
        {
            if (persistString == typeof(Form2).ToString())
                return form2;
            if (persistString == typeof(Form3).ToString())
                return form3;
            return null;
        }
        public void InitDockPanel(string m_DockPath)
        {
            if (File.Exists(m_DockPath))
            {
                dockPanel1.LoadFromXml(m_DockPath, GetContentFromPersistString);  //根据配置文件动态加载浮动窗体
            }

        }
        /// <summary>
        /// 默认布局
        /// </summary>
        public void ShowDefaultLayout()
        {
            if (form2 != null && !form2.IsDisposed)
            {
                form2.Show(dockPanel1, DockState.DockBottom);
            }
            else
            {
                form2 = new Form2();
                form2.Show(dockPanel1, DockState.DockBottom);
            }

            if (form3 != null && !form3.IsDisposed)
            {
                form3.Show(dockPanel1, DockState.DockLeft);
            }
            else
            {
                // frmDisplay = new FrmDisplay(1);
                form3 = new Form3();
                form3.Show(dockPanel1, DockState.DockLeft);
            }
        }



        /// <summary>
        /// 保存当前布局
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void save()
        {
            dockPanel1.SaveAsXml(m_DockPath);
        }



      
    }
}

标签:Form2,C#,布局,dockPanel1,System,form3,form2,using,DockPanelSuit
From: https://www.cnblogs.com/nashinani/p/17800083.html

相关文章

  • 多模态对比语言图像预训练CLIP:打破语言与视觉的界限
    多模态对比语言图像预训练CLIP:打破语言与视觉的界限一种基于多模态(图像、文本)对比训练的神经网络。它可以在给定图像的情况下,使用自然语言来预测最相关的文本片段,而无需为特定任务进行优化。CLIP的设计类似于GPT-2和GPT-3,具备出色的零射击能力,可以应用于多种多模态任务。多模态......
  • 【Python微信机器人】第三篇:使用ctypes调用进程函数和读取内存结构体
    目录修整目前的系列目录(后面会根据实际情况变动):在windows11上编译python将python注入到其他进程并运行注入Python并使用ctypes主动调用进程内的函数和读取内存结构体使用汇编引擎调用进程内的任意函数利用beaengine反汇编引擎的c接口写一个pyd库,用于实现inlinehook利用......
  • 理解 JavaScript 的 async/await
    1.async和await在干什么任意一个名称都是有意义的,先从字面意思来理解。async是“异步”的简写,而await可以认为是asyncwait的简写。所以应该很好理解async用于申明一个function是异步的,而await用于等待一个异步方法执行完成。另外还有一个很有意思的语法规定,awai......
  • 百度AICA首席AI架构师培养计划第七期毕业,大模型深入产业见成果
    10月28日,由深度学习技术及应用国家工程研究中心与百度联合创办的AICA首席AI架构师培养计划,迎来第7期毕业典礼,88位学员获得AI架构师认证。截至目前,AICA已累计为业界培养了410位产业AI领军人才。同时,AICA第7期毕业学员约有三分之一聚焦大模型产业应用课题并取得先期成果。百度文心......
  • SIP UserAgent (B2BUA client)——pjsip
    1.sipstackspjsip/bell-sip/sofia-sip/libeXosip/librehttps://github.com/staskobzar/sip_stacks_examples 2.sipuseragentandservernetworkarchitecture3. InstallingpjsiponUbuntuhttps://www.pjsip.orgsudoapt-getinstalllibasound2-devLinuxsys......
  • soft Exponential activation function
    全文https://ieeexplore.ieee.org/document/7526959SoftExponentialActivationFunction ASoftExponentialActivationFunctionisaparametricneuronactivationfunctionthatisbasedontheinperpolationoftheidentity,logarithmandexponentialfunctions......
  • ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
    ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑1.Elasticsearch产生背景大规模数据如何检索如:当系统数据量上了10亿、100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题:1)用什么数据库好?(mysql、oracle、mongodb、hbase…)2)如......
  • [Leetcode] 0111. 二叉树的最小深度
    111.二叉树的最小深度题目描述给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。 示例1:输入:root=[3,9,20,null,null,15,7]输出:2示例2:输入:root=[2,null,3,null,4,null,5,null,6]输......
  • 单细胞测序 10x genomics
     单细胞转录组从研究方向看上,发育生物学、免疫、神经生物学、肿瘤是排名靠前的方向,这和我们平时遇到的高频研究方向基本吻合。另外,作为一个新兴的领域,10X单细胞转录组检测到细胞多,数据庞大,信息复杂,对数据分析带来诸多困难,因此算法类的文章(Computationalmethod)也高达76篇。从物种......
  • 单细胞测序 Trajectory analysis 轨迹推断
    单细胞测序Trajectoryanalysis轨迹推断细胞多样性不能通过离散的分类系统(例如细胞聚类)充分描述。观察到的细胞异质性发展的生物进程是一个连续过程(Tanay&Regev,2017)。因此,为了捕获细胞身份之间的过渡状态、不同的分化分支或生物学功能的渐进式非同步变化,我们需要动态的基因表达模......