基于.Net Core实现自定义皮肤WidForm窗口
前言
今天一起来实现基于.Net Core、Windows Form实现自定义窗口皮肤,并实现窗口移动功能。
素材
准备素材:边框、标题栏、关闭按钮图标。

窗体设计
1、创建Window窗体项目


2、窗体设计
拖拉4个Panel控件,分别用于:标题栏、关闭按钮、窗体、底部边框。

3、添加图片到资源
右键项目=》属性=》资源=》创建资源

点击添加资源=》添加现有文件。

4、设置控件背景图片
选择对应的Panel控件,分别设置标题栏、窗体、底部、关闭按钮。


5、效果
此时运行项目,窗体效果如下:

窗体事件
窗口的皮肤已经自定义完毕,下面我们为窗口添加事件:关闭和移动。
1、关闭窗口
为关闭按钮,添加关闭事件,按钮如下。
private void panel1_Click(object sender, EventArgs e)
{this.Close();
}
2、窗口移动代码
public void FrmMove(Form Frm, MouseEventArgs e) //Form或MouseEventArgs添加命名空间using System.Windows.Forms;{if (e.Button == MouseButtons.Left){Point myPosittion = Control.MousePosition;//获取当前鼠标的屏幕坐标myPosittion.Offset(CPoint.X, CPoint.Y);//重载当前鼠标的位置Frm.DesktopLocation = myPosittion;//设置当前窗体在屏幕上的位置Tem_place = 0;this.Height = FrmHeight;}}
private void timer1_Tick(object sender, EventArgs e){if (this.Top < 3 && Tem_place==0)//如果窗体被移到屏幕的顶部{if (this.Handle == FormNameAt(Cursor.Position.X, Cursor.Position.Y))//当鼠标移致到该窗体上{panel_Title.Tag = 1;//设置标识,用于判断窗体在屏幕顶部timer2.Enabled = false;//不对窗体进行拉伸操作this.Top = 0;//使窗体致顶}else{panel_Title.Tag = 1;//设置标识,用于判断窗体在屏幕顶部timer2.Enabled = true;//将窗体在顶部进行隐藏}}else{if (this.Left < 3 || this.Right > GetSystemMetrics(0) - 3)//如果窗体被移到屏幕的左端或右端{if (this.Left < 3)//如果窗体被移到屏幕的左端{if (this.Handle == FormNameAt(Cursor.Position.X, Cursor.Position.Y))//当鼠标移致到该窗体上{panel_Title.Tag = 2;//设置标识,用于判断窗体在屏幕左端timer2.Enabled = false;Frm_Height = this.Height;this.Left = 0;//使窗体致左this.Top = 0;this.Height = Screen.AllScreens[0].Bounds.Height;Tem_place = 1;}else{panel_Title.Tag = 2;timer2.Enabled = true;//将窗体在左端进行隐藏}}if (this.Right > GetSystemMetrics(0) - 3)//如果窗体被移到屏幕的右端{if (this.Handle == FormNameAt(Cursor.Position.X, Cursor.Position.Y))//当鼠标移致到该窗体上{panel_Title.Tag = 3;//设置标识,用于判断窗体在屏幕右端timer2.Enabled = false;Frm_Height = this.Height;this.Left = GetSystemMetrics(0) - this.Width;//使窗体致右this.Top = 0;this.Height = Screen.AllScreens[0].Bounds.Height;Tem_place = 1;}else{panel_Title.Tag = 3;timer2.Enabled = true;//将窗体在右端进行隐藏}}}}}
好了,今天就分享到这边,需要示例代码的获取👇🏻。
欢迎点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
相关文章:
基于.Net Core实现自定义皮肤WidForm窗口
前言 今天一起来实现基于.Net Core、Windows Form实现自定义窗口皮肤,并实现窗口移动功能。 素材 准备素材:边框、标题栏、关闭按钮图标。 窗体设计 1、创建Window窗体项目 2、窗体设计 拖拉4个Panel控件,分别用于:标题栏、关…...
【Rust】操作日期与时间
目录 介绍 一、计算耗时 二、时间加减法 三、时区转换 四、年月日时分秒 五、时间格式化 介绍 Rust的时间操作主要用到chrono库,接下来我将简单选一些常用的操作进行介绍,如果想了解更多细节,请查看官方文档。 官方文档:chr…...
blender快捷键
1, shift a 添加物体 2,ctrl alt q 切换四格视图 3, ~ 展示物体的各个视图按钮,(~ 就是tab键上面的键) 4,a 全选,全选后,点 ctrl 鼠标框选 减去已经选择的;…...
java Spring Boot 自动启动热部署 (别再改点东西就要重启啦)
上文 java Spring Boot 手动启动热部署 我们实现了一个手动热部署的代码 但其实很多人会觉得 这叫说明热开发呀 这么捞 写完还要手动去点一下 很不友好 其实我们开发人员肯定是希望重启这种事不需要自己手动去做 那么 当然可以 我们就让它自己去做 Build Project 这个操作 我们…...
TouchGFX之后端通信
在大多数应用中,UI需以某种方式连接到系统的其余部分,并发送和接收数据。 它可能会与硬件外设(传感器数据、模数转换和串行通信等)或其他软件模块进行交互通讯。 Model类 所有TouchGFX应用都有Model类,Model类除了存…...
cesium gltf控制
gltf格式详解 glTF格式本质上是一个JSON文件。这一文件描述了整个3D场景的内容。它包含了对场景结构进行描述的场景图。场景中的3D对象通过场景结点引用网格进行定义。材质定义了3D对象的外观,动画定义了3D对象的变换操作(比如选择、平移操作)。蒙皮定义了3D对象如何进行骨骼…...
Spring的依赖注入(DI)以及优缺点
Spring的依赖注入(DI):解释和优点 依赖注入(Dependency Injection,简称DI)是Spring框架的核心概念之一,也是现代Java应用程序开发的重要组成部分。本文将深入探讨DI是什么,以及它的…...
【强化学习】05 —— 基于无模型的强化学习(Prediction)
文章目录 简介蒙特卡洛算法时序差分方法Example1 MC和TD的对比偏差(Bias)/方差(Variance)的权衡Example2 Random WalkExample3 AB 反向传播(backup)Monte-Carlo BackupTemporal-Difference BackupDynamic Programming Backup Boot…...
【计算机组成原理】考研真题攻克与重点知识点剖析 - 第 1 篇:计算机系统概述
前言 本文基础知识部分来自于b站:分享笔记的好人儿的思维导图,感谢大佬的开源精神,习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析,本人技术有限ÿ…...
【Java-LangChain:面向开发者的提示工程-8】聊天机器人
第八章 聊天机器人 使用一个大型语言模型的一个令人兴奋的事情是,我们可以用它来构建一个定制的聊天机器人 (Chatbot) ,只需要很少的工作量。在这一节中,我们将探索如何利用聊天的方式,与个性化(或专门针对特定任务或…...
利用t.ppft.interval分别计算T分布置信区间[实例]
scipy.stats.t.interval用于计算t分布的置信区间,即给定置信水平时,计算对应的置信区间的下限和上限。 scipy.stats.t.ppf用于计算t分布的百分位点,即给定百分位数(概率)时,该函数返回给定百分位数对应的t…...
软件工程第三周
可行性研究 续 表达工作量的方式 LOC估算:Line of Code 估算公式S(Sopt4SmSpess)/6 FP:功能点 1. LOC (Line of Code) 估算 定义:LOC是指一个软件项目中的代码行数。 2. FP (Function Points) 估算 定义:FP是基于软件的功能性和…...
动态链接那些事
1、为什么要动态链接 1.1 空间浪费 对于静态链接来说,在程序运行之前,会将程序所需的所有模块编译、链接成一个可执行文件。这种情况下,如果 Program1 和 Program2 都需要用到 Lib.o 模块,那么,内存中和磁盘中实际上就…...
力扣:118. 杨辉三角(Python3)
题目: 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 来源:力扣(LeetCode) 链接:力扣(LeetCode)官…...
QGIS文章二——DEM高程裁剪和3D地形图
经常看到别人基于高程文件制作出精美的3D地图,笔者按照互联网几种制作方式进行尝试后,写的DEM高程裁剪和3D地形图教程,或许其中有一些错误的,也请指出。 本文基于海南省的shp文件和海南省DEM高程文件,制作海口地区的3D…...
【kubernetes】kubernetes中的StatefulSet使用
TOC 1 为什么需要StatefulSet 常规的应用通常使用Deployment,如果需要在所有机器上部署则使用DaemonSet,但是有这样一类应用,它们在运行时需要存储一些数据,并且当Pod在其它节点上重建时也希望这些数据能够在重建后的Pod上获取&…...
创建文件夹
/storage/emulated/0/代码文件/ 没有就创建 文件名命名方法:编号. 库 时间戳 使用Python的os模块来检查目录是否存在,并在不存在时创建它。下面是一个示例代码,演示了如何检查指定路径下的目录是否存在,若不存在则创建…...
点击router-link时候会发生什么?
当你点击链接或按钮时,将会导航到 User 组件,就会显示相应的用户 ID。 这里说一下执行流程,当点击一个 router-link 时,Vue Router会执行以下流程: 1)点击事件触发: 当你点击 router-link 组件时…...
【Spring】@Bean方法中存在继承如何分析
文章目录 1. 提问:如果让您分析Spring MVC的原理,您如何开始分析呢2. 如何破局3. 资料参考 本文主要介绍:如何分析 Bean方法存在继承 或 Bean方法中存在调用子类方法。 1. 提问:如果让您分析Spring MVC的原理,您如何…...
【Vim 插件管理器】Vim-plug和Vim-vbundle的区别
- vundle是一款老款的插件管理工具 - vim-plug相对较新,特点是支持异步加载,相比vundle而言 Vim-plug 是一个自由、开源、速度非常快的、极简的 vim 插件管理器。它可以并行地安装或更新插件。你还可以回滚更新。它创建浅层克隆shallow clone最小化磁盘…...
Arm编译器在嵌入式开发中的优化实践
1. Arm编译器嵌入式开发环境概述在嵌入式系统开发领域,工具链的选择往往决定了最终产品的性能上限。作为Arm架构的"原生"编译器,Arm Compiler for Embedded凭借其深度优化的代码生成能力,在物联网设备、工业控制器等资源受限场景中…...
Kafka高效的原因
Kafka高效的原因Kafka的高效性源于其独特的架构设计和多项优化技术,以下是关键因素:分布式架构与分区机制 Kafka采用分布式设计,主题(Topic)被划分为多个分区(Partition),每个分区可…...
Lumi Diary:基于OpenClaw Skill的本地AI记忆伴侣设计与实践
1. 项目概述:一个住在你设备里的记忆精灵如果你和我一样,对把生活点滴交给云端总有点不放心,但又渴望有一个能懂你、能帮你把碎片记忆编织成故事的伙伴,那么 Lumi Diary 的出现,可能正是时候。这不是又一个需要你手动打…...
taotoken的token plan套餐让长期使用的成本预测变得简单
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken 的 Token Plan 套餐让长期使用的成本预测变得简单 对于将大模型 API 深度集成到业务流程中的团队而言,成本管…...
终极指南:5分钟搭建SillyTavern AI聊天前端,解锁个性化角色对话体验
终极指南:5分钟搭建SillyTavern AI聊天前端,解锁个性化角色对话体验 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 想要创建专属的AI聊天伙伴,体验深度…...
如何突破窗口限制:3分钟掌握WindowResizer强制调整技巧
如何突破窗口限制:3分钟掌握WindowResizer强制调整技巧 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些无法拖拽大小的应用程序窗口而烦恼吗?Win…...
贝叶斯深度学习不确定性估计:集成学习与MC-Dropout实战对比
1. 项目概述:为什么我们需要量化深度学习的不确定性?在自动驾驶汽车识别前方障碍物、医疗AI系统诊断病灶、或者机器人进行精细操作时,一个错误的预测可能导致灾难性的后果。传统的深度神经网络(DNN)在这些任务上表现出…...
TinyTroupe:轻量级智能体协作范式与确定性AI工程实践
1. 项目概述:这不是另一个“小模型”,而是一套轻量级智能体协作范式你可能已经看过不少标题带“Tiny”“Mini”“Lite”的AI项目,它们大多是在说“把大模型压缩一下,跑在手机上”。但 Microsoft 的TinyTroupe完全不是这个路数——…...
ctf show web 入门46
这道题目是上一题的升级版,过滤条件变得更加苛刻了。我们来分析一下新增的限制以及应对方案。 代码审计与变化 相比之前,正则过滤 preg_match 新增了以下内容: [0-9]:禁止使用任何数字。这意味着 $IFS$9 这种绕过方式失效了。 \$&…...
制造业财务场景AI自动化方案,主流厂商横向对比 —— 2026企业级智能体选型全景盘点
进入2026年,全球制造业正处于从“自动化”向“智能共生”跨越的关键节点。 财务部门作为企业的数据中枢,其AI自动化方案已不再局限于早期的OCR识别或简单的流程脚本。 随着大模型(LLM)与智能体(Agent)技术的…...
