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

时间:2014-01-14 19:13:12

标签: c# winforms visual-studio-2010

好吧,我会在按钮上放一个图像,那个图像有圆角。我该如何实现这一目标?我一直在谷歌搜索和搜索几个小时,仍然没有运气。

3 个答案:

答案 0 :(得分:3)

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

How to: Draw Shapes with the OvalShape and RectangleShape Controls

上有文档

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

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

When the program is run

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

答案 1 :(得分:1)

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

或查看这些文章:

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

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

答案 2 :(得分:0)

我到处寻找解决这个问题的方法,而且似乎很难找到。但是我使用在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。 并且因为它使用了对象,你可以将相同的功能应用于图片框和其他控件(尽管不是全部)

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