winform如何自定义控件
时间: 2023-07-31 09:05:52 浏览: 82
在 Winform 中,你可以通过继承现有控件的方式,来自定义一个控件。以下是一个简单的示例,演示如何自定义一个带有圆角的按钮控件:
```csharp
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
class RoundedButton : Button
{
public int CornerRadius { get; set; } = 16;
protected override void OnPaint(PaintEventArgs pevent)
{
Graphics graphics = pevent.Graphics;
graphics.SmoothingMode = SmoothingMode.AntiAlias;
using (GraphicsPath path = new GraphicsPath())
{
int x = CornerRadius;
int y = CornerRadius;
int width = Width - 1 - CornerRadius;
int height = Height - 1 - CornerRadius;
path.AddArc(x, y, CornerRadius, CornerRadius, 180, 90);
path.AddArc(width, y, CornerRadius, CornerRadius, 270, 90);
path.AddArc(width, height, CornerRadius, CornerRadius, 0, 90);
path.AddArc(x, height, CornerRadius, CornerRadius, 90, 90);
path.CloseAllFigures();
graphics.FillPath(new SolidBrush(BackColor), path);
graphics.DrawPath(new Pen(ForeColor), path);
}
StringFormat stringFormat = new StringFormat();
stringFormat.LineAlignment = StringAlignment.Center;
stringFormat.Alignment = StringAlignment.Center;
graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle, stringFormat);
}
}
```
在上面的代码中,我们自定义了一个 `RoundedButton` 类,继承自 `Button` 控件,并重写了 `OnPaint` 方法以实现圆角效果。`CornerRadius` 属性用于设置圆角的半径大小。我们使用了 `GraphicsPath` 类来绘制圆角矩形,并使用 `SmoothingMode.AntiAlias` 属性来实现抗锯齿效果。
使用自定义控件时,你可以像普通控件一样将其添加到窗体中,并设置它的属性。例如:
```csharp
RoundedButton button1 = new RoundedButton();
button1.Location = new Point(100, 100);
button1.Size = new Size(150, 50);
button1.Text = "My Button";
button1.CornerRadius = 24;
this.Controls.Add(button1);
```
在上面的代码中,我们创建了一个 `RoundedButton` 类型的控件,并将其添加到窗体中。我们设置了它的位置、大小、文本和圆角半径属性。当用户单击该按钮时,相应的代码会被执行。