C# Winform 窗体美化(十、自定义窗体)

十、自定义窗体

写在前面

最近在做 winform 应用程序,需要自定义一种窗口的样式,所以就随便搞了一个简单的窗口。

效果图

有两种样式,界面如下:
无标题:
无标题
有标题:
有标题

关键词

1、黑色描边边框

对于窗口去掉原生的边框这个操作很简单【设置FormBorderStyle为None】,但是去掉边框之后略显生硬,所以就考虑如何做一个描边。

方案a:用画笔画出来,但是画出来的描边会被控件挡住,所以作废;
方案b:使用4个label,设置长宽和颜色,设置为最顶层,分别摆放在上下左右四个边缘位置,现在来看效果还不错,因为是控件是最顶层的原因,所以也不会被挡住,【如果你看到此处有什么好主意一定告知一下,先谢过了 ^_^ 】

2、拖动窗口移动

由于设置FormBorderStyle为None的原因,所以原来窗口标题的拖动功能也一并去除了,所以需要重新来手动实现原来标题的移动功能,重写OnMouseMove方法即可,代码如下:

protected override void OnMouseMove(MouseEventArgs e)
{base.OnMouseMove(e);if (e.Button == MouseButtons.Left){//这里一定要判断鼠标左键按下状态,否则会出现一个很奇葩的BUG,不信邪可以试一下~~ReleaseCapture();SendMessage(Handle, 0x00A1, 2, 0);}
}[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

3、关于窗口属性的添加

因为我做了描边的功能,所以相对应的,应该会有一个描边粗细的设置,当然放到属性面板里最好,这里贴一下如何在属性面板里添加新项目:

private int _Border = 1;
[Category("Style")]
[Description("窗体边框粗细")]
[DefaultValue(typeof(int), "1")]
public int Border
{get { return _Border; }set{if (_Border != value){_Border = value;SetBorder();}}
}

具体解释可以再VS看到,都很详细。

源码

下载

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

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

相关文章

几种在shell命令行中过滤adb logcat输出的方法

几种在shell命令行中过滤adb logcat输出的方法 分类标签: LogCat ADB 我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率。本文就具体介绍几种在sh…

duration java_Java Duration类| toHours()方法与示例

duration javaDuration Class toHours()方法 (Duration Class toHours() method) toHours() method is available in java.time package. toHours()方法在java.time包中可用。 toHours() method is used to convert this Duration into the number of hours. toHours()方法用于…

SpringBoot时间格式化的5种方法!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)在我们日常工作中,时间格式化是一件经常遇到的事儿,所以本文我们就来盘点一下 Spring Boot 中时间格…

C#文件加密和解密

下载 CSDN下载:https://download.csdn.net/download/myinc/9913318 Github:GitHub 如果没有积分,也可以关注我获取哟~【文件加密】 // * 最近看了一下加密算法,对加密文件突然很感兴趣,就研究了一下:…

zabbix server 迁移步骤

zabbix server 迁移步骤: 1.在新机器上安装同版本的zabbix server软件和zabbix agent软件。 2.同步zabbix_server.conf配置文件。 3.同步/usr/lib/zabbix/{alertscripts,externalscripts}里面的程序。 4.我们这里有安装使用oneproxy,需要同步oneproxy软件…

stl reserve_vector :: reserve()函数以及C ++ STL中的示例

stl reserveC vector :: reserve()函数 (C vector::reserve() function) vector::reserve() is a library function of "vector" header, which is used to request change in vector allocation. Refer to example to understand in details. vector :: reserve()是…

SpringBoot 如何统一后端返回格式?老鸟们都是这样玩的!

大家好,我是磊哥。今天我们来聊一聊在基于SpringBoot前后端分离开发模式下,如何友好的返回统一的标准格式以及如何优雅的处理全局异常。首先我们来看看为什么要返回统一的标准格式?为什么要对SpringBoot返回统一的标准格式在默认情况下&#…

SysinternalsSuite工具

写在前面(下载) 下载地址 简介 sysinternals 的网站创立于1996年由Mark russinovich和布赖科格斯韦尔主办其先进的系统工具和技术资料微软于2006年7月收购sysinternals公司 . 不管你是一个IT高级工作者还是一个开发者,你都会发现sysintern…

zabbix企业应用之监控docker容器资源情况

关于docker的监控,无论开源的CAdvisor、Data Dog还是我自己写的监控(http://dl528888.blog.51cto.com/2382721/1635951),不是通过docker的stats api就是使用socket来进行。单独看一个主机的监控项还行,比如只查看容器t…

使用了synchronized,竟然还有线程安全问题!

线程安全问题一直是系统亘古不变的痛点。这不,最近在项目中发了一个错误使用线程同步的案例。表面上看已经使用了同步机制,一切岁月静好,但实际上线程同步却毫无作用。关于线程安全的问题,基本上就是在挖坑与填坑之间博弈&#xf…

序列图| 软件工程

什么是时序图? (What is Sequence Diagram?) Sequence Diagram is a "Connection Diagram" that represents a single structure or storyline executing in a system. It is the second most used UML diagram behind the class diagram. Sequence Diag…

终极解密输入网址按回车到底发生了什么?

详解输入网址点击回车,后台到底发生了什么。透析 HTTP 协议与 TCP 连接之间的千丝万缕的关系。掌握为何是三次握手四次挥手?time_wait 存在的意义是什么?全面图解重点问题,再也不用担心面试问这个问题。大致流程URL 解析&#xff…

unity, 相机空间 与 相机gameObject的局部空间

在unity里 相机空间 与 相机gameObject的局部空间 不重合。 Camera.worldToCameraMatrix的文档中有这样一句话: Note that camera space matches OpenGL convention: cameras forward is the negative Z axis. This is different from Unitys convention, where for…

Winform实现漂亮动画-小火车

一、起因 最近在做一个Winform的项目,其中需要一些加载动画,所以就搜索了一下找些思路,以下链接是本文的参考。 参考:Jeremie Martinez (译文链接) 注:原文中并没有给出图片资源,图…

julia在mac环境变量_在Julia中确定值/变量的类型

julia在mac环境变量To determine the type of value, variable – we use typeof() function, it accepts a value or a variable or a data type itself and returns the concrete type of the given parameter. 要确定值的类型,变量 –我们使用typeof()函数 &…

synchronized 加锁 this 和 class 的区别!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)synchronized 是 Java 语言中处理并发问题的一种常用手段,它也被我们亲切的称之为“Java 内置锁”,由…

不懂技术的人请不要对懂技术的人说这很容易

“这个网站相当简单,所有你需要做的就是完成X,Y,Z。你看起来应该是技术很好,所以,我相信,你不需要花费太多时间就能把它搭建起来。”我时不时的就会收到这样的Email。写这些邮件的人几乎都是跟技术不沾边的…

C# WinForm窗体四周阴影效果

一、起因 关于winform窗体无边框的问题很简单,只需要设置winform的窗体属性即可: FormBorderStyle FormBorderStyle.None; 但是这中无边框窗口实现的效果和背景完全没有层次的感觉,所以能加上阴影,突出窗口显示的感觉。 二、…

循环语句与条件语句_在PHP中混合条件语句和循环

循环语句与条件语句As mentioned earlier, the looping statement is executing a particular code as long as a condition is true. On the order hand, conditional statements are statements that can only be executed based on the fulfillment of a particular conditi…

synchronized 优化手段之锁膨胀机制!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)synchronized 在 JDK 1.5 之前性能是比较低的,在那时我们通常会选择使用 Lock 来替代 synchronized。然而这个情…