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. 设置圆角按钮的样式
除了使用代码进行样式设置之外,我们还可以通过控件的属性设置进行样式设置。例如,我们可以在应用程序的资源文件中定义按钮的圆角样式,如下图所示:
然后在代码中应用该样式,如下所示:
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控件,如下所示:
示例二
首先,我们需要在资源文件中定义一张圆角样式的背景图片。接着,在代码中使用该背景图片实现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控件,使用了定义好的资源文件,如下所示:
5. 总结
本文介绍了Winform控件圆角按钮的实现方法,并提供了两个示例帮助读者了解如何使用代码和资源文件实现圆角按钮。读者可以根据自己的需要进行选择,使用代码或资源文件实现样式设置。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Winform控件优化之圆角按钮1 - Python技术站