0

私は選択的な角を丸めたボタンの作成に取り組んでいます。Web で検索した後、ボタンのすべての角を丸くするスニペットを見つけました。しかし、ボタンの 1 つまたは 2 つの角だけを丸める必要があります。これが私のボタンの外観です。

ここに画像の説明を入力

ここでは、ボタン A の左上隅、B の右上隅、C の左下隅、D の右下隅を丸くしたいと考えています。

これは、ボタンのすべての角を丸くするために見つけたコードです。

Dim p As New Drawing2D.GraphicsPath 
p.StartFigure() 
p.AddArc(New Rectangle(0, 0, 40, 40), 180, 90) 
p.AddLine(40, 0, Button1.Width - 40, 0) 
p.AddArc(New Rectangle(Button1.Width - 40, 0, 40, 40), -90, 90) 
p.AddLine(Button1.Width, 40, Button1.Width, Button1.Height - 40) 
p.AddArc(New Rectangle(Button1.Width - 40, Button1.Height - 40, 40, 40), 0, 90) 
p.AddLine(Button1.Width - 40, Button1.Height, 40, Button1.Height) 
p.AddArc(New Rectangle(0, Button1.Height - 40, 40, 40), 90, 90) 
p.CloseFigure() 
Button1.Region = New Region(p)

問題は、グラフィックスについてよくわからないため、これを微調整して特定の角だけを丸くすることができないことです。描画ロジックを理解するのを手伝ってもらえますか、またはこのスニペットを微調整して目的の結果を得ることができますか?

4

1 に答える 1

3

これを試して:

Public Sub RoundCorners(ByVal leftTop As Boolean, ByVal rightTop As Boolean, ByVal rightBottom As Boolean, ByVal leftBottom As Boolean)
  Dim p As New Drawing2D.GraphicsPath 
  p.StartFigure() 
  p.AddArc(New Rectangle(0, 0, IIF(leftTop,40,1), IIF(leftTop,40,1)), 180, 90) 
  p.AddArc(New Rectangle(Button1.Width - IIF(rightTop,40,1), 0, IIF(rightTop,40,1), IIF(rightTop,40,1)), -90, 90) 
  p.AddArc(New Rectangle(Button1.Width - IIF(rightBottom,40,1), Button1.Height - IIF(rightBottom,40,1), IIF(rightBottom,40,1), IIF(rightBottom,40,1)), 0, 90) 
  p.AddArc(New Rectangle(0, Button1.Height - IIF(leftBottom,40,1), IIF(leftBottom,40,1), IIF(leftBottom,40,1)), 90, 90) 
  p.CloseFigure() 
  Button1.Region = New Region(p)
End Sub

使用法

RoundCorners(true,true,true,true) //Round all corners
RoundCorners(true,false,false,false) //Round left-top corner

アップデート

RoundCornersこの方法でメソッドを実装するとさらに良いです:

Public Sub RoundCorners(ByVal leftTop As Int32, ByVal rightTop As Int32, ByVal rightBottom As Int32, ByVal leftBottom As Int32)
  If leftTop <= 0 Then leftTop = 1
  If rightTop <= 0 Then rightTop = 1
  If rightBottom <= 0 Then rightBottom = 1
  If leftBottom <= 0 Then leftBottom = 1
  Dim p As New Drawing2D.GraphicsPath 
  p.StartFigure() 
  p.AddArc(New Rectangle(0, 0, leftTop, leftTop), 180, 90) 
  p.AddArc(New Rectangle(Button1.Width - rightTop, 0, rightTop, rightTop), -90, 90) 
  p.AddArc(New Rectangle(Button1.Width - rightBottom, Button1.Height - rightBottom, rightBottom, rightBottom), 0, 90) 
  p.AddArc(New Rectangle(0, Button1.Height - leftBottom, leftBottom, leftBottom), 90, 90) 
  p.CloseFigure() 
  Button1.Region = New Region(p)
End Sub

使用法

RoundCorners(40,40,40,40)   //Round all corners
RoundCorners(40,0,0,0)      //Round left-top corners
于 2013-10-01T07:19:31.767 に答える