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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Easyui 表单验证「建议收藏」

    Easyui 表单验证「建议收藏」Easyui 表单验证

    2022年4月25日
  • Java Swing 图形界面开发(目录)

    JavaSwing图形界面(GUI)开发基础教程(目录)

    2022年4月10日
  • 计算机毕业设计Java校园租赁系统的设计与实现(源码+系统+mysql数据库+Lw文档)[通俗易懂]

    计算机毕业设计Java校园租赁系统的设计与实现(源码+系统+mysql数据库+Lw文档)[通俗易懂]计算机毕业设计Java校园租赁系统的设计与实现(源码+系统+mysql数据库+Lw文档)计算机毕业设计Java校园租赁系统的设计与实现(源码+系统+mysql数据库+Lw文档)最新计算机专业原创毕业设计参考选题都有源码+数据库是近期作品可领qu参考你的选题刚好在下面有,有时间看到机会给您发【1】 jspNBA篮球资讯网 【2】 ssm社区便捷管理系统 【3】 ssm阳明湖风景区订票系统 【4】 ssm农家乐信息平台 【5】 ssm+sqlserv

    2022年6月11日
  • PSCP 基本使用[通俗易懂]

    PSCP 基本使用[通俗易懂]PSCP基本使用问题:如何免密码输入,传送数据“sshpassisnotrecognized”onWindows”PSCP:是Putty的文件传输工具,用于两台电脑之间的文件传输重点:可以在命令中添加密码,不像SCP需要单独输入密码下载putty工具putty工具操作1:从本地传输文件到服务器(windowtolinux)PSCP-pw12345678C:\Users\Firmi\Desktop\test.txtroot@192.168.1.88:/root

    2022年10月27日
  • 美国目前最流行的五种量化交易模型[通俗易懂]

    美国目前最流行的五种量化交易模型[通俗易懂]01、股票多空策略股票多空策略(EquityLong/Short),即买一些股票,通过融券的方式去卖空一些股票,然后再用一些股指期货进行对冲。这是国际上主流的HedgeFund所用的量化策略,据知名数据商Eurekahedge的统计数据,在国际对冲基金中长期占比第一(一直超过30%)。比如2011年获得美国量化基金业评比第一名的贝莱德“32Cap全球对冲基金产品”使用的就是经典的多空策略…

    2022年6月26日
  • Java守护线程「建议收藏」

    Java守护线程「建议收藏」1、什么是守护线程Java线程分两种:用户线程和守护线程。守护线程,是指在程序运行的时,后台提供一种通用服务的线程。比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。守护线程和用户线程的没有本质的区别,不同之处在于虚拟机的离开;若用户线程已全部退出运行,只剩守护线程存在,虚拟机也即退出。因没有了被守护者,守护线程也就无工作可做,也

    2022年10月15日

发表回复

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

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