【问题标题】:How do I create button with rounded corners/edges on Winform C#?如何在 Winform C# 上创建带有圆角/边缘的按钮?
【发布时间】:2014-02-03 00:14:05
【问题描述】:

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

【问题讨论】:

标签: c# winforms visual-studio-2010


【解决方案1】:

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

How to: Draw Shapes with the OvalShape and RectangleShape Controls 有文档

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

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

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

【讨论】:

  • @Xam 谢谢你。我已将信息添加到答案中。
【解决方案2】:

如果你想坚持windows窗体,那么你应该使用一个图片框并在悬停时制作一些动画等。当你点击它时,它会像一个按钮一样发挥作用。

或查看以下文章:

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

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

【讨论】:

    【解决方案3】:

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

    1.必须有visual studio,新建项目
    2. 选择一个新的窗体作为您的新项目
    3. 在表单中添加 2 x 按钮
    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 像素的边框半径 和这样的 50 像素半径“buttonBorderRadius(sender, 50)” 只需将整数更改为函数中的第二个参数, 第一个参数必须是对象变量

    【讨论】:

      猜你喜欢
      • 2015-04-13
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      相关资源
      最近更新 更多