C# 使用GDI+设计登录窗体(窗体渐变和关闭淡出)

C# 使用GDI+实现窗体渐变和关闭淡出效果

1、窗体渐变色

GDI+ :(Graphics Device Interface)

csharp 复制代码
#region 窗体渐变效果  重写OnPaint
protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    //获取画布
    Graphics graphics = e.Graphics;
    //获取矩形(目标窗体)
    Rectangle  rec = new Rectangle(0,0,this.Width,this.Height);
    //画刷 :指定渐变色和渐变方向
    LinearGradientBrush linearGradientBrush = new LinearGradientBrush(rec, Color.FromArgb(255, 101, 127), Color.FromArgb(93, 127, 124), LinearGradientMode.BackwardDiagonal);
    graphics.FillRectangle(linearGradientBrush, rec);
}
#endregion

1.重写(override)

重写(override):子类对父类中方法进行按照自身需要进行对方法体进行重写,重写方法与父类方法在访问权限、返回值、方法名以及参数不变。

2.重载(overload)

重载(overload):在一个类中对同一方法名按照不同的需求编写出多个方法,方法名相同,但是参数的类型或者个数不能相同,返回值类型不能作为重载的标志。

3.覆写(new)

覆写(overwrite):用 new 实现。在子类中用 new 关键字修饰定义的与父类中同名的方法,也称为覆盖,覆盖不会改变父类方法的功能。

2、无边框拖动(点标题框)

csharp 复制代码
 #region 无边框拖动
 private Point mPoint;
 private void labTitle_MouseDown(object sender, MouseEventArgs e)
 {
     //获取焦点
     mPoint = e.Location;
 }

 private void labTitle_MouseMove(object sender, MouseEventArgs e)
 {
     //左键才可拖动
     if (e.Button == MouseButtons.Left)
     {
         this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);
     }
 }
 #endregion

3、关闭图标

图标获取(阿里巴巴矢量图):https://www.iconfont.cn/

csharp 复制代码
using Timer = System.Windows.Forms.Timer;
public LoginForm()
{
    InitializeComponent();

    //初始化定时器,绑定触发函数
    mCloseTimer.Interval = 10;
    mCloseTimer.Tick += mCloseTimer_Tick;
}
#region 淡出效果
private Timer mCloseTimer = new Timer();
private void mCloseTimer_Tick(object? sender, EventArgs e)
{
    if (this.Opacity >= 0.025)
    {
        this.Opacity -= 0.025;
    }
    else
    {
        this.mCloseTimer.Enabled = false;
        this.Close();
    }
}
/// <summary>
/// 关闭淡出效果
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void picClose_Click(object sender, EventArgs e)
{
    //开启定时器
    this.mCloseTimer.Enabled = true;
}
#endregion

4、完整代码

csharp 复制代码
using System.Drawing.Drawing2D;
using Timer = System.Windows.Forms.Timer;

namespace LoginForm
{
    public partial class LoginForm : Form
    {
        public LoginForm()
        {
            InitializeComponent();

            //初始化定时器,绑定触发函数
            mCloseTimer.Interval = 10;
            mCloseTimer.Tick += mCloseTimer_Tick;
        }

        

        #region 窗体渐变效果
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            //获取画布
            Graphics graphics = e.Graphics;
            //获取矩形(目标窗体)
            Rectangle rec = new Rectangle(0, 0, this.Width, this.Height);
            //画刷 :指定渐变色和渐变方向
            LinearGradientBrush linearGradientBrush = new LinearGradientBrush(rec, Color.FromArgb(255, 101, 127), Color.FromArgb(93, 127, 124), LinearGradientMode.BackwardDiagonal);
            graphics.FillRectangle(linearGradientBrush, rec);
        }
        #endregion

        #region 无边框拖动
        private Point mPoint;
        private void labTitle_MouseDown(object sender, MouseEventArgs e)
        {
            //获取焦点
            mPoint = e.Location;
        }

        private void labTitle_MouseMove(object sender, MouseEventArgs e)
        {
            //左键才可拖动
            if (e.Button == MouseButtons.Left)
            {
                //移动距离
                this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);
            }
        }
        #endregion

        #region 淡出效果
        private Timer mCloseTimer = new Timer();
        private void mCloseTimer_Tick(object? sender, EventArgs e)
        {
            if (this.Opacity >= 0.025)
            {
                this.Opacity -= 0.025;
            }
            else
            {
                this.mCloseTimer.Enabled = false;
                this.Close();
            }
        }
        /// <summary>
        /// 关闭淡出效果
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void picClose_Click(object sender, EventArgs e)
        {
            //开启定时器
            this.mCloseTimer.Enabled = true;
        }
        #endregion
    }
}
相关推荐
CS创新实验室11 分钟前
NumPy数组的C风格和Fortran风格
c语言·开发语言·numpy
逝水无殇1 小时前
C# 正则表达式详解
开发语言·后端·正则表达式·c#
朱永博1 小时前
使用Onnruntime实现Padim/Patchcore推理
开发语言·c#
前端H1 小时前
Biome & Rolldown:Rust 工具链接管前端基建
开发语言·前端·rust
天天进步20151 小时前
UI-TARS 源码解析 #4:UI-TARS 与传统 RPA 的区别:为什么它不是简单的坐标点击脚本?
开发语言
运维行者_1 小时前
广域网性能监控:分布式IT架构下的链路质量保障
开发语言·网络·分布式·后端·架构·数据库架构
梅雅达编程笔记1 小时前
零基础学 Python 第7章 | 字典 dict:键值对存储
开发语言·python·beautifulsoup·numpy·pandas
灯澜忆梦1 小时前
GO---map函数
开发语言·前端·后端·golang
hehelm2 小时前
Linux网络编程—HTTP静态文件服务器
linux·服务器·开发语言·网络·c++
北冥you鱼2 小时前
Go语言与默克尔树:区块链数据完整性的基石
开发语言·golang·区块链