【发布时间】:2014-02-03 00:14:05
【问题描述】:
我会在按钮上放一张图片,该图片有圆角。我该如何做到这一点?我一直在谷歌搜索和搜索几个小时,仍然没有运气。
【问题讨论】:
-
winforms 不支持好看的东西。您正在寻找 WPF。
标签: c# winforms visual-studio-2010
我会在按钮上放一张图片,该图片有圆角。我该如何做到这一点?我一直在谷歌搜索和搜索几个小时,仍然没有运气。
【问题讨论】:
标签: c# winforms visual-studio-2010
您可以使用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 控件。
【讨论】:
如果你想坚持windows窗体,那么你应该使用一个图片框并在悬停时制作一些动画等。当你点击它时,它会像一个按钮一样发挥作用。
或查看以下文章:
http://www.codeproject.com/Articles/15730/RoundButton-Windows-Control-Ever-Decreasing-Circle http://www.codeproject.com/Articles/10303/Elliptical-Circular-Button
但是,如果您想要更好的布局,也可以使用 WPF,但它与 Windows 窗体有些不同。
【讨论】:
我到处寻找这个问题的解决方案,但似乎很难找到。但是我使用在绘制事件期间调用的函数在按钮控件上获得了圆角。
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)”
只需将整数更改为函数中的第二个参数,
第一个参数必须是对象变量
【讨论】: