Winform模拟Visual Studio工具栏拖拉拽、停靠

news2024/11/26 0:43:41

背景

随着公司接的业务复杂度提高,软件界面设计需求也相应提升,老板不再满足于单面板的各种跳转,所以明白了吧,不提升自己就等于自愿失业或转行!!!

方案

本来想着自学自写一套控件库来实现,但是时间有点紧,只能先做完项目偷偷抽时间写,现在主要使用现成的大佬写好的控件。由于需求还算简单,只是六七个页面揉合到一个主窗体,所有采用目前大多博客推荐的DockPanel

1、新建一个.Net Framework 4.7.2 窗体应用项目,我这里使用默认命名

2、右键单击引用,选择NuGet,下载安装 WeiFenLuo.WinFormsUI.Docking这个控件库

成功安装后你可以在工具箱找到DockPanel这个第三方控件

 

3、拖一个DockPanel进Form1中,并将其Dock改为Fill

 

 

4、新建另一个窗体类命名为Form2 

 

5、打开Form2代码,让其改为继承WeifenLuo.WinFormsUI.Docking.DockContent

6、打开Form1代码,修改代码如下,实现给dockpanel添加5个其他窗口

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            //最大化主窗口
            WindowState = FormWindowState.Maximized;
            IsMdiContainer = true;
            //添加窗体加载事件处理函数
            Load += Form1_Load;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 fLeft = new Form2();
            fLeft.Text = "left";
            fLeft.Show(dockPanel1);
            fLeft.DockTo(dockPanel1, DockStyle.Left);

            Form2 fRight = new Form2();
            fRight.Text = "right";
            fRight.Show(dockPanel1);
            fRight.DockTo(dockPanel1, DockStyle.Right);

            Form2 fTop = new Form2();
            fTop.Text = "up";
            fTop.Show(dockPanel1);
            fTop.DockTo(dockPanel1, DockStyle.Top);

            Form2 fBottom = new Form2();
            fBottom.Text = "bottom";
            fBottom.Show(dockPanel1);
            fBottom.DockTo(dockPanel1, DockStyle.Bottom);

            Form2 fFill = new Form2();
            fFill.Text = "fill";
            fFill.Show(dockPanel1);
            fFill.DockTo(dockPanel1, DockStyle.Fill);
        }
    }
}

 7、运行程序

拖拽窗体fill,可以停靠到其他区域,这些都是DockPanel这个库内部实现的,无需我们自己关心 

 

8、注意事项

DockPanel库使用有几个需要注意的地方

【1】项目记得选择.net framework框架

【2】主窗体必须设置IsMdiContainer=true,表示启用多文档容器

【3】DockPanel的子窗体必须继承 WeifenLuo.WinFormsUI.Docking.DockContent ,这样你在对其进行拖拉拽的时候才会响应停靠、移动、拉伸功能

结语

先苟住,再找时间充实、强化自身

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抽象类和接口—javaSE

这里写目录标题 1.抽象类1.1概念1.2语法1.3特性1.4使用 2.接口2.1概念2.2语法2.3特性2.4重要的接口2.4.1给数组对象排序(Comparable、Comparator)2.4.2 Cloneable(浅拷贝) 2.5抽象类和接口的区别 3.object类3.1定义3.2equals3.3获…

智慧文旅-VR全景展示助力开启景区数字化管理新方式

导语: 在数字化时代,旅游业面临着新的机遇和挑战。 为了吸引更多游客并提供独特的旅行体验,结合VR全景技术和智慧文旅的创新模式已经成为不可忽视的趋势。 一.提升旅游感官体验 VR全景技术正以惊人的速度在旅游业中崭露头角。通过…

【自监督论文阅读 2】MAE

文章目录 一、摘要二、引言2.1 引言部分2.2 本文架构 三、相关工作3.1 Masked language modeling3.2 Autoencoding3.3 Masked image encoding3.4 Self-supervised learning 四、方法4.1 Masking4.2 MAE encoder4.3 MAE decoder4.4 Reconstruction target 五、主要实验5.1 不同m…

【云原生】· 一文了解docker中的网络

目录 🍒查看docker网络 🍒bridge网络 🍒none网络 🍒host网络 🍒自定义容器网络 🦐博客主页:大虾好吃吗的博客 🦐专栏地址:云原生专栏 根据前面的学习,已经对d…

netty http3功能从零开始

1、windows安装jdk和mvn、gradle、gloovy 配置环境变量JAVA_HOME CLASSPATH MVN_HOME GRADLE_HOME GLOOVY_HOME mvn和gradle都是用来管理和编译java项目的,mvn比较老,现在一般用gradle 2、vscode环境 vscode安装extension:Extension Pack fo…

springboot 日志配置(logback)

概述 Java 中的日志框架主要分为两大类:日志门面和日志实现。 Java 中的日志体系: 日志门面 日志门面定义了一组日志的接口规范,它并不提供底层具体的实现逻辑。Apache Commons Logging 和 Slf4j(Simple Logging Facade for Jav…

基于Python垃圾短信识别程序(KNN、逻辑回归、随机森林、决策树和多项式分布朴素贝叶斯、伯努利分布朴素贝叶斯等算法进行融合)—含python工程全源码

目录 前言总体设计系统整体结构图请求流程图系统流程图 运行环境Python 环境jieba分词库Scikit-learn 库nginxphp 模块实现1. 前端模块2. 后端模块 系统测试1. 测试结果2. 结果对比3. 可视化部分 工程源代码下载其它资料下载 前言 本项目以Python为基础,旨在开发一…

http 三次握手 四次挥手

网络参考模型 网络层是端点间的(客户端、服务端) 链路层是跳跃节点间的。 TCP/IP 下一跳模式(网关) 内存小,速度快,不可靠。(网络号、主机号) TCP协议是一种面向连接的、可靠的、基…

Docker部署(4)——运行时日志时间不对(时区设置)

当使用docker run 命令时,发现容器虽然成功运行,但是输出的时间却不对 。使用timedatectl命令后发现Linux系统的时间是正常的时间。 于是将问题缩小到是不是docker 在运行时没有使用宿主机的时区的原因,那么解决办法可以将宿主机的时区映射到…

Maven(二):Maven的使用入门

文章目录 使用入门项目骨架pom.xml构建过程编写测试打包和运行常用打包方式maven-shade-plugin使用filter与artifactSet - 过滤jar包Transformer 参考文献 使用入门 项目骨架 对于一个使用Maven来管理的项目,Maven提倡使用一个目录结构标准: ${basedi…

Selenium+Python+Pycharm自动化环境搭建具体步骤

一、python下载:建议选择3.4以上的版本 官网下载地址: Download Python | Python.org 下载后自行进行安装,安装python需要配置环境变量,安装时可勾选“add python to path”的选项。勾选之后会自动将python添加到系统环境变量Pa…

学习AD的一些记录

1.首先创建一个工程,然后在工程里面创建原理图,PCB,原理图库和PCB库。 并保存。 2.将外部的原理图库,pcb库复制到自己创建的原理图库和pcb库。放到这两个里面。 复制,并粘贴到自己创建的原理图库中。PCB库同理 3.然后…

vue2和vue3的渲染过程简述版

文章目录 vue2渲染过程vue3渲染过程优化和扩充 vue2和vue3对比 vue2渲染过程 在Vue 2的渲染过程中,包括以下几个关键步骤: 解析模板:Vue 2使用基于HTML语法的模板,首先会将模板解析成抽象语法树(AST)&…

高频前端面试题汇总之代码输出结果篇

前言: 代码输出结果是面试中常考的题目,一段代码中可能涉及到很多的知识点,这就考察到了应聘者的基础能力。在前端面试中,常考的代码输出问题主要涉及到以下知识点:异步编程、事件循环、this指向、作用域、变量提升、…

SolidWorks软件三维建模教程——莫比乌斯环建模案例

SolidWorks是达索系统(Dassault Systemes )下的子公司,专门负责研发与销售机械设计软件的视窗产品。SOLIDWORKS软件三维建模功能强大,为制造型企业提供SOLIDWORKS一体化解决方案和服务。 今天微辰三维就以莫比乌斯环的三维建模案例…

智慧灯杆云盒是什么?如何挑选智慧云盒?

慧路灯杆云盒,是一种专门用于智慧路灯杆远距通信、远程控制、数据分析、边缘计算的智能终端设备,智慧路灯杆云盒作为联通智慧路灯杆与物联网云平台的桥梁,可以有效提高智慧路灯杆的管理效率、降低维护成本、实现多样化设备联动协同功能&#…

【C++】的多态

目录 1. 多态的概念2. 多态的定义及实现虚函数虚函数的重写虚函数重写的两个例外:C11 override 和 final重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类接口继承和实现继承 4. 多态的原理虚函数表 5. 单继承和多继承关系中的虚函数表单继承中的虚函数表多继承中的…

qemu虚拟机配置网络

一、实现qemu虚机&宿主机网络互通 qemu虚机的网络介绍及原理可参考前人文章:Linux 内核调试 七:qemu网络配置_lqonlylove的博客-CSDN博客 这里只简单梳理下操作流程,以便快速实现网络互通。 1.宿主机创建 tap0 [rootlocalhost ~]# if…

一文入门Mongodb

目录 概述核心概念下载与安装版本问题环境配置cmd运行 数据库与集合命令数据库命令集合命令文档命令 mongoosemongoose的使用插入字段类型mongoose字段验证与强制性设置删除文档更新文档读取数据条件控制 后记 概述 Mongodb是一个分布式文件存储的数据库。 官网:M…