Winform控件优化之圆角按钮1

Winform控件优化之圆角按钮1

Winform中的按钮控件在设计时为了美观通常会考虑使用圆角按钮。本文将介绍Winform控件圆角按钮的实现方法,涉及Winform控件创建、绘制和事件处理等方面。

1. 预备知识

本文需要了解以下知识点:

  • C#基础语法
  • Winform控件的创建和使用
  • GDI+绘图基础知识

2. 创建圆角按钮

首先,在Winform窗体中创建一个Button控件,然后将其FlatStyle属性设置为Flat:

Button button = new Button();
button.FlatStyle = FlatStyle.Flat;

接着,为了使按钮变成圆角,我们需要在按钮的Paint事件中进行绘制。在该事件中,我们可以使用GraphicsPath对象绘制圆角矩形,然后使用Graphics对象填充矩形和绘制按钮文本,代码如下:

private void button_Paint(object sender, PaintEventArgs e)
{
    Button button = sender as Button;
    Graphics g = e.Graphics;
    g.Clear(button.BackColor);
    using (GraphicsPath path = new GraphicsPath())
    {
        path.AddArc(button.ClientRectangle.X, button.ClientRectangle.Y, button.CornerRadius, button.CornerRadius, 180, 90);
        path.AddArc(button.ClientRectangle.X + button.ClientRectangle.Width - button.CornerRadius, button.ClientRectangle.Y, button.CornerRadius, button.CornerRadius, 270, 90);
        path.AddArc(button.ClientRectangle.X + button.ClientRectangle.Width - button.CornerRadius, button.ClientRectangle.Y + button.ClientRectangle.Height - button.CornerRadius, button.CornerRadius, button.CornerRadius, 0, 90);
        path.AddArc(button.ClientRectangle.X, button.ClientRectangle.Y + button.ClientRectangle.Height - button.CornerRadius, button.CornerRadius, button.CornerRadius, 90, 90);
        path.CloseFigure();

        g.FillPath(new SolidBrush(button.BackColor), path);
        if (button.Enabled)
        {
            g.DrawString(button.Text, button.Font, new SolidBrush(button.ForeColor), button.ClientRectangle, new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
        }
        else
        {
            g.DrawString(button.Text, button.Font, new SolidBrush(Color.Gray), button.ClientRectangle, new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
        }
    }
}

在上述代码中,我们定义了一个名为CornerRadius的属性,用于指定按钮的圆角半径,默认值为5。然后我们绘制了4个圆角弧线和一个矩形,组成了一个圆角矩形。最后使用FillPath方法填充绘制的图形。

3. 设置圆角按钮的样式

除了使用代码进行样式设置之外,我们还可以通过控件的属性设置进行样式设置。例如,我们可以在应用程序的资源文件中定义按钮的圆角样式,如下图所示:

Winform控件优化之圆角按钮1

然后在代码中应用该样式,如下所示:

button.FlatStyle = FlatStyle.Flat;
button.FlatAppearance.BorderSize = 0;
button.BackgroundImage = Properties.Resources.ButtonBackground;
button.BackgroundImageLayout = ImageLayout.Stretch;
button.Cursor = Cursors.Hand;

上述代码中,我们使用了各种属性对控件进行设置,包括背景、边框、光标等。

4. 示例说明

下面分别给出两个Winform控件圆角按钮的实现示例,其中一个是使用代码实现设置按钮样式,另一个是使用资源文件实现按钮样式。

示例一

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WinformCornerButtonExample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitButton1();
        }

        private void InitButton1()
        {
            Button button = new Button();
            button.Location = new Point(50, 50);
            button.Size = new Size(100, 50);
            button.FlatStyle = FlatStyle.Flat;
            button.FlatAppearance.BorderSize = 0;
            button.BackColor = Color.MediumSeaGreen;
            button.ForeColor = Color.White;
            button.Font = new Font("Microsoft YaHei", 12);
            button.Text = "Button 1";
            button.Cursor = Cursors.Hand;
            button.CornerRadius = 20;
            button.Paint += button_Paint;
            Controls.Add(button);
        }

        private void button_Paint(object sender, PaintEventArgs e)
        {
            Button button = sender as Button;
            Graphics g = e.Graphics;
            g.Clear(button.BackColor);
            using (GraphicsPath path = new GraphicsPath())
            {
                path.AddArc(button.ClientRectangle.X, button.ClientRectangle.Y, button.CornerRadius, button.CornerRadius, 180, 90);
                path.AddArc(button.ClientRectangle.X + button.ClientRectangle.Width - button.CornerRadius, button.ClientRectangle.Y, button.CornerRadius, button.CornerRadius, 270, 90);
                path.AddArc(button.ClientRectangle.X + button.ClientRectangle.Width - button.CornerRadius, button.ClientRectangle.Y + button.ClientRectangle.Height - button.CornerRadius, button.CornerRadius, button.CornerRadius, 0, 90);
                path.AddArc(button.ClientRectangle.X, button.ClientRectangle.Y + button.ClientRectangle.Height - button.CornerRadius, button.CornerRadius, button.CornerRadius, 90, 90);
                path.CloseFigure();

                g.FillPath(new SolidBrush(button.BackColor), path);
                g.DrawString(button.Text, button.Font, new SolidBrush(button.ForeColor), button.ClientRectangle, new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
            }
        }
    }
}

上述代码实现了一个绿色的带圆角的Button控件,如下所示:

Winform控件优化之圆角按钮1

示例二

首先,我们需要在资源文件中定义一张圆角样式的背景图片。接着,在代码中使用该背景图片实现Button控件的样式。

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WinformCornerButtonExample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitButton2();
        }

        private void InitButton2()
        {
            Button button = new Button();
            button.Location = new Point(50, 50);
            button.Size = new Size(100, 50);
            button.FlatStyle = FlatStyle.Flat;
            button.FlatAppearance.BorderSize = 0;
            button.BackgroundImage = Properties.Resources.ButtonBackground;
            button.BackgroundImageLayout = ImageLayout.Stretch;
            button.Font = new Font("Microsoft YaHei", 12);
            button.Text = "Button 2";
            button.Cursor = Cursors.Hand;
            button.Paint += button_Paint;
            Controls.Add(button);
        }

        private void button_Paint(object sender, PaintEventArgs e)
        {
            Button button = sender as Button;
            e.Graphics.DrawString(button.Text, button.Font, new SolidBrush(button.ForeColor), button.ClientRectangle, new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
        }
    }
}

上述代码实现了一个带圆角的Button控件,使用了定义好的资源文件,如下所示:

Winform控件优化之圆角按钮1

5. 总结

本文介绍了Winform控件圆角按钮的实现方法,并提供了两个示例帮助读者了解如何使用代码和资源文件实现圆角按钮。读者可以根据自己的需要进行选择,使用代码或资源文件实现样式设置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Winform控件优化之圆角按钮1 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Win10预览版19042.450怎么通过下载补丁KB4566782升级?

    下面我将为你详细讲解“Win10预览版19042.450怎么通过下载补丁KB4566782升级”的完整攻略。 1. 确认系统版本和补丁名称 首先,我们需要确认当前系统的版本是否为Win10预览版19042.450,以及需要下载的补丁名称是否为KB4566782。你可以按下“Win+R”组合键打开运行命令框,输入“winver”并按下回车键,查看系统版本号是否…

    other 2023年6月27日
    00
  • python+opencv实现阈值分割

    Python+OpenCV实现阈值分割攻略 阈值分割是图像处理中常用的一种方法,用于将图像分割成不同的区域,以便进行后续的分析和处理。在本攻略中,我们将使用Python编程语言和OpenCV库来实现阈值分割。 步骤1:导入库和读取图像 首先,我们需要导入必要的库和模块,并读取待处理的图像。在这个例子中,我们将使用OpenCV的cv2模块来处理图像。 impo…

    other 2023年7月29日
    00
  • 安装sklearn失败

    安装sklearn失败 机器学习是当前最热门的领域之一,而Scikit-learn(sklearn)则是最受欢迎的Python机器学习库之一。然而,在安装sklearn时可能会遇到各种问题,包括无法安装、无法使用或出现其他错误。本文将介绍如何识别和解决安装sklearn时可能遇到的一些常见问题。 安装sklearn时报错 如果在安装sklearn时出现错误消…

    其他 2023年3月28日
    00
  • 详解Java实现设计模式之责任链模式

    详解Java实现设计模式之责任链模式 一、概述 责任链模式(Chain of Responsibility Pattern)是一种对象行为型设计模式,其作用是减少请求发送者与接收者之间的耦合,通过使多个对象都有机会处理请求来解决请求的发送者和接收者之间的耦合关系。通常情况下,每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,它会把相同的请求传…

    other 2023年6月26日
    00
  • ECC 构筑安全可靠的区块链

    ECC 构筑安全可靠的区块链 区块链技术的应用正在越来越广泛地渗透到我们生活的方方面面。然而,随着区块链技术的深入发展,一些以前不曾被人关注的问题也逐渐浮出水面,比如区块链的安全性问题。 在区块链中,加密算法是保证隐私和安全的重要手段之一。而可植入的加密算法竞赛(ECC)则是一个目前广泛应用在区块链中的加密算法。下面将介绍ECC在构筑安全可靠的区块链中扮演的…

    其他 2023年3月28日
    00
  • iPhone11怎么强制重启?iPhone11/11pro强制重启图文教程

    iPhone11怎么强制重启? 如果你的iPhone11或iPhone11 Pro在使用过程中出现卡死、屏幕黑屏或无响应等问题,你可以尝试强制重启来解决问题。下面是iPhone11/11Pro强制重启的图文教程。 步骤一:按住侧边按键+音量控制键 在进行强制重启前,请确保你的iPhone11或iPhone11Pro已经连接充电器或电脑并且有足够的电量。否则可…

    other 2023年6月26日
    00
  • 什么是ssrssr有什么用如何使用使用ssr

    什么是 SSR SSR (ShadowsocksR) 是基于 Shadowsocks 开发的一款科学上网工具。 SSR 与 Shadowsocks 最明显的区别在于 SSR 增加了对协议和混淆的支持。它不仅使用了 Shadowsocks 的加密和传输,而且还采用了更加复杂的混淆方式,使得 GFW 难以识别和封锁。 SSR 的优点和用途 能有效突破网络审查,访…

    其他 2023年3月28日
    00
  • Java继承的问题引导和测试代码

    下面是详细讲解“Java继承的问题引导和测试代码”的完整攻略。 引导 在Java中,继承是实现面向对象编程的重要特性之一。但是在使用继承过程中,有一些问题需要我们注意。本篇攻略就是为了帮助Java初学者解决继承时遇到的一些问题。 问题与解决 问题一:构造函数覆盖问题 在父类中,如果有一个带有参数的构造函数,那么在子类中如何调用这个构造函数呢? 在Java中,…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部