C#自定义控件之-winform美化「建议收藏」

C#自定义控件之-winform美化「建议收藏」对于系统自带的窗体,博主实在不敢恭维,测试时使用方便快捷,但真正项目中无法使用,只因不美观的外表,每次都很头疼窗体的美化,这里列出一些需要解决的问题和自己收集到的解决方法,如有错误请指出。废话不多说先上一张最近写的一个小工具的效果图。以上是工具的基本截图,在工具的制作中对窗体的自定义包括以下几点:一、无边框拖动窗体当设置窗体的fromboderstyle为null时,系统自带的窗体

大家好,又见面了,我是你们的朋友全栈君。

对于系统自带的窗体,博主实在不敢恭维,测试时使用方便快捷,但真正项目中无法使用,只因不美观的外表,每次都很头疼窗体的美化,这里列出一些需要解决的问题和自己收集到的解决方法,如有错误请指出。

废话不多说先上一张最近写的一个小工具的效果图。C#自定义控件之-winform美化「建议收藏」

以上是工具的基本截图,在工具的制作中对窗体的自定义包括以下几点:

一、无边框拖动窗体

当设置窗体的formboderstyle为null时,系统自带的窗体拖拽属性就失效了,需要自己写这一部分。在这个工具里博主曹勇panel控件当作窗体的头部,因此实现窗体拖拽也就是实现拖拽panel时窗体位置发生变化,代码如下:

首先引入系统api

  [DllImport(“user32.dll”, CharSet = CharSet.Unicode)]
        public static extern IntPtr SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);

        [DllImport(“user32.dll”, CharSet = CharSet.Unicode)]
        public static extern bool ReleaseCapture();
        private const long WM_GETMINMAXINFO = 0x24;

        public struct POINTAPI
        {

            public int x;
            public int y;
        }

        public struct MINMAXINFO
        {

            public POINTAPI ptReserved;
            public POINTAPI ptMaxSize;
            public POINTAPI ptMaxPosition;
            public POINTAPI ptMinTrackSize;
            public POINTAPI ptMaxTrackSize;
        }

然后在panel的鼠标左键按下实践中实现如下代码:

  private void panel_top_MouseDown(object sender, MouseEventArgs e)
        {

            const int WM_NCLBUTTONDOWN = 0x00A1;
            const int HTCAPTION = 2;
            if (e.Button == MouseButtons.Left) // 按下的是鼠标左键 
            {

                ReleaseCapture();
                SendMessage(this.Handle, WM_NCLBUTTONDOWN, (IntPtr)HTCAPTION, IntPtr.Zero); // 拖动窗体 
            }
        }

二、无边框窗体最大化后软件占满全屏无法显示底部工具栏

当无边框窗体最大化时会出现全屏的问题,为了解决这个问题,需要在初始化时限定窗体的大小,在构造函数中添加如下代码,如下:

this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);

三、无边框窗体实现四周阴影效果

当窗体设置为无边框后系统自带的阴影效果就失效了,需要自己手动添加,为了以后使用方便,我特意把整个美化做成了单独的窗体类,以后使用直接继承即可实现效果,这样做可以一劳永逸(主要是博主懒,哈哈),在此声明,代码参考网络,具体代码就不贴出来了,文章最后有四周阴影效果代码原作者的文章URL,详情请移步http://bbs.cskin.net/thread-61-1-1.html,谢谢。

另附源码下载地址,标一分是为了鼓励自己,在此声明下载数超过50后免费,希望大家见谅。工程源码(下载)

已经超过50,但是我没有找到如何编辑资源积分的地方,同时也删除不了,不知道你们有没有遇到这样的问题,希望可以帮我把积分改一下,谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145847.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OSI参考模型——物理层详解

    OSI参考模型——物理层详解一 物理层的基本功能物理层是 OSI 参考模型的最低层 它利用传输介质为通信的主机之间建立 管理和释放物理连接 实现比特流的透明传输 传输单位是比特 保证比特流通过传输介质的正确传输 1 与数据链路的关系物理层屏蔽了物理层采用的传输介质 通信设备和通信技术的差异性 指定不同类型的物理协议 使得数据链路只需要考虑如何使用物理层的服务 而不用考虑物理层采用了那种传输介质 2 物理层的协议类型计算机网路

    2025年8月31日
    3
  • vue组件通讯之$attrs

    vue组件通讯之$attrs使用场景我们会遇到这样的场景,比如对element-ui的el-table组件进行二次开发,但是el-table组件有很多属性比如控制高度的height,传入数据的data还有border、size、fit等一个个的去传显然不大现实,这个使用用$attrs处理起来就会特别优雅。举例子组件:自定义组件对el-table进行封装,用$attrs接收父组件传过来的属性<template&g…

    2022年10月18日
    2
  • 汉字与 Unicode 转换

    汉字与 Unicode 转换

    2021年8月31日
    52
  • 64位CENTOS 5(RED HAT AS5)安装配置(web服务、邮件服务、WEB邮件)小记

    64位CENTOS 5(RED HAT AS5)安装配置(web服务、邮件服务、WEB邮件)小记

    2021年7月25日
    45
  • MATLAB中canny算子边缘检测「建议收藏」

    MATLAB中canny算子边缘检测「建议收藏」今天来介绍一下关于canny算子做边缘检测的过程:Canny的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:好的检测-算法能够尽可能多地标识出图像中的实际边缘。好的定位-标识出的边缘要与实际图像中的实际边缘尽可能接近。最小响应-图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。1、首先打开MATLAB软件,在其主界面中写入下列代码:I=imre…

    2022年5月8日
    276
  • Spring中@Autowired、@Resource和@Inject注解的使用和区别

    做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!在使用Spring进行项目开发的时候,会大量使用到自动装配,那自动装配是什么呢?简单来说:Spring 利用依赖注入(DI)功能,完成SpringIOC容器中各个组件之间的依赖关系赋值管理。下面介绍和总结可以在在Spring使用的三种自动注入的注解。首先回顾一下最初使用xml进行是如何进行注入的。零、回顾:XML…

    2022年2月28日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号