如何在Winform C#上创建带圆角/边缘的按钮?

好吧,我将在按钮上放置一个图像,该图像有圆角。 我该如何做到这一点? 我一直在谷歌搜索和搜索几个小时,仍然没有运气。

如果你想坚持使用Windows窗体,那么你应该使用一个图片框并在hover时制作一些动画等。当你点击它时,它将像一个按钮一样运行。

或者看看这些文章:

http://www.codeproject.com/Articles/15730/RoundButton-Windows-Control-Ever-Decreasing-Circle http://www.codeproject.com/Articles/10303/Elliptical-Circular-Button

但是,如果你想要一个更好的布局,你也可以使用WPF,但它与Windows窗体有些不同。

您可以使用Microsoft Visual Basic PowerPacks中的矩形形状。

如何:使用OvalShape和RectangleShape控件绘制形状的文档

我检查它在Windows7 x64上VS2013 Express for Windows桌面的C#Windows窗体项目中工作,目标是x86和x64。 用户xam报告它也适用于VS2017。

private void rectangleShape1_Click(object sender, EventArgs e) { MessageBox.Show("Click!"); } 

程序运行时

为方便起见,您可以添加一个新的工具箱选项卡并向其添加VB PP控件。

我到处寻找解决这个问题的方法,似乎很难找到。 但是我使用在paint事件期间调用的函数在按钮控件上得到了圆角。

1.必须有视觉工作室,创建一个新项目
2.选择一个新窗体作为新项目
3.在表单中添加2个按钮
4.双击表单上的任意位置以打开代码窗口
5.删除所有代码,包括Form1子标题,并粘贴到下面

 Imports System.Drawing.Drawing2D Public Class Form1 Public Sub buttonBorderRadius(ByRef buttonObj As Object, ByVal borderRadiusINT As Integer) Dim p As New Drawing2D.GraphicsPath() p.StartFigure() 'TOP LEFT CORNER p.AddArc(New Rectangle(0, 0, borderRadiusINT, borderRadiusINT), 180, 90) p.AddLine(40, 0, buttonObj.Width - borderRadiusINT, 0) 'TOP RIGHT CORNER p.AddArc(New Rectangle(buttonObj.Width - borderRadiusINT, 0, borderRadiusINT, borderRadiusINT), -90, 90) p.AddLine(buttonObj.Width, 40, buttonObj.Width, buttonObj.Height - borderRadiusINT) 'BOTTOM RIGHT CORNER p.AddArc(New Rectangle(buttonObj.Width - borderRadiusINT, buttonObj.Height - borderRadiusINT, borderRadiusINT, borderRadiusINT), 0, 90) p.AddLine(buttonObj.Width - borderRadiusINT, buttonObj.Height, borderRadiusINT, buttonObj.Height) 'BOTTOM LEFT CORNER p.AddArc(New Rectangle(0, buttonObj.Height - borderRadiusINT, borderRadiusINT, borderRadiusINT), 90, 90) p.CloseFigure() buttonObj.Region = New Region(p) End Sub Private Sub Button1_Paint(sender As Object, e As PaintEventArgs) Handles Button1.Paint buttonBorderRadius(sender, 25) End Sub Private Sub Button2_Paint(sender As Object, e As PaintEventArgs) Handles Button2.Paint buttonBorderRadius(sender, 50) End Sub End Class 

调用函数“buttonBorderRadius(sender,50)”意味着您可以为各个按钮设置不同的borderRadius。 并且因为它使用了对象,你可以将相同的function应用于图片框和其他控件(尽管不是全部)

所以你可以用“buttonBorderRadius(sender,10)”设置一个10像素的边框半径,像这样的“buttonBorderRadius(sender,50)”设置50像素半径,只需将整数更改为函数中的第二个参数,第一个参数有成为对象变量