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,一经查实,立即删除!

相关文章

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

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

C#文件加密和解密

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

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

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

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 (译文链接) 注:原文中并没有给出图片资源,图…

synchronized 加锁 this 和 class 的区别!

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

C# WinForm窗体四周阴影效果

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

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

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

NTFS USN的Create和工具代码汇总

1、 因为之前把相关代码放在了GitHub上,后来突然有人帮忙改了些个BUG,非常感谢 760193107,所以就写了个完整点的例子,希望对别人有所帮助。 GitHub项目地址 2、错误码:ERROR_JOURNAL_NOT_ACTIVE 在测试时&#xff…

在Java中,负数的绝对值不一定是正数!

作者 l Hollis来源 l Hollis(ID:hollischuang)绝对值是指一个数在数轴上所对应点到原点的距离,所以,在数学领域,正数的绝对值是这个数本身,负数的绝对值应该是他的相反数。这几乎是每个人都知道…

自己写着玩(二)

转载于:https://www.cnblogs.com/wangmengmeng/p/4572611.html

实战:隐藏SpringBoot中的私密数据!

这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号、密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小。说起这个我是比较有感触的,之前我TM被删库…

JS的条形码和二维码生成

一、前言 最近做项目用到了JS生成条形码和二维码,内容不多,整理一下方便使用。 2018年7月5日更新: 二维码生成时,如果长度太长会有异常: Uncaught Error: code length overflow. (1604>1056) 创建的时候&#…

synchronized 中的 4 个优化,你知道几个?

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)synchronized 在 JDK 1.5 时性能是比较低的,然而在后续的版本中经过各种优化迭代,它的性能也得到了前…

31Exchange Server 2010跨站点部署-搬迁Exchange服务器到分支机构

16.4 将EX07和EX08搬迁到上海分支机构首先我在上海分支机机构站点下创建一个CAS阵列,命令如下:下面获取下当前域中的CAS阵列信息16.4.1搬迁CAS,HT服务器1、从广州总部NLB群集删除EX07主机2、修改EX07的IP地址为分支机构IP地址 192.168.20.27(上海分支机构…

@Autowired的这些骚操作,你都知道吗?

前言最近review别人代码的时候,看到了一些Autowired不一样的用法,觉得有些意思,特定花时间研究了一下,收获了不少东西,现在分享给大家。也许Autowired比你想象中更强大。1. Autowired的默认装配我们都知道在spring中Au…