2010/11/18(Thu) 21:54:11 編集(投稿者)
サンプルを書いてみました。
新規プロジェクトを立ち上げて、Form1.vbの中身を以下のコードにすれば動かせます。
GraphicsPathクラスにはAdd〜という図形を追加するメソッドがありますので、
自分の希望する図形をどうやったら(どのメソッドを組み合わせたら)描けるかを
考えるところからはじめます。後は実際に紙に鉛筆で図を描く手順通りに
メソッドの呼び出しを組み合わせるだけです。
…と簡単に書きましたが、Add〜なメソッドでどんな風に
図形が描かれるのかを想像しながらの作業なので簡単には行きません。
試行錯誤が必要になるでしょう。
また、コンピュータの座標系と数学の座標系が異なる(Y軸の向きが逆)とか、
角度を指定するメソッドの場合に0度の位置や+N度と-N度がどっち向きだっけ?と私もよくわからなくなります。
そんなときは単純なコードをいくつか書いてみて検証して目で確認します。
--↓サンプル--
Imports System.Windows.Forms
Imports System.Drawing
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'' 実験の準備
'' Button1〜Button4のボタンをフォームに配置
'' (通常はボタンはデザイナで配置しますが、ここで提示するコードだけで検証可能なようにボタンの生成・配置もコードで行います)
'' ここではボタンの変化がわかりやすいように配置するボタンの形は正方形、ボーダー無し、背景色に分かりやすい色を設定しています)
Dim Button1 As Button = New Button()
Dim Button2 As Button = New Button()
Dim Button3 As Button = New Button()
Dim Button4 As Button = New Button()
With Button1
.BackColor = Color.Red
.FlatAppearance.BorderSize = 0
.FlatStyle = FlatStyle.Flat
.Location = New Point(24, 12)
.Name = "Button1"
.Size = New Size(75, 75)
.Text = "Button1"
End With
With Button2
.BackColor = Color.Blue
.FlatAppearance.BorderSize = 0
.FlatStyle = FlatStyle.Flat
.Location = New Point(105, 12)
.Name = "Button2"
.Size = New Size(75, 75)
.Text = "Button2"
End With
With Button3
.BackColor = Color.Lime
.FlatAppearance.BorderSize = 0
.FlatStyle = FlatStyle.Flat
.Location = New Point(24, 93)
.Name = "Button3"
.Size = New Size(75, 75)
.Text = "Button3"
End With
With Button4
.BackColor = Color.Orange
.FlatAppearance.BorderSize = 0
.FlatStyle = FlatStyle.Flat
.Location = New Point(105, 93)
.Name = "Button4"
.Size = New Size(75, 75)
.Text = "Button4"
End With
Me.Controls.Add(Button1)
Me.Controls.Add(Button2)
Me.Controls.Add(Button3)
Me.Controls.Add(Button4)
'' ここからが本題のRegionに設定するGraphicsPathを作成し、各ボタンの形状を設定しています
' 円形
With Button1
Dim myPath As New Drawing2D.GraphicsPath
myPath.AddEllipse(New Rectangle(0, 0, .Width, .Height))
.Region = New Region(myPath)
End With
' 台形
With Button2
Dim myPath As New Drawing2D.GraphicsPath
myPath.AddPolygon(New Point() {New Point(0, .Height), New Point(.Width * 1 / 5, 0), New Point(.Width * 4 / 5, 0), New Point(.Width, .Height)})
.Region = New Region(myPath)
End With
' 扇形
With Button3
Dim myPath As New Drawing2D.GraphicsPath
myPath.AddPie(New Rectangle(-.Width, 0, .Width * 2, .Height * 2), 0, -90)
.Region = New Region(myPath)
End With
' )形
With Button4
Dim myPath As New Drawing2D.GraphicsPath
myPath.AddArc(New Rectangle(-10, 0, .Width, .Height), 90, -180)
myPath.AddArc(New Rectangle(0, 0, .Width, .Height), 270, 180)
.Region = New Region(myPath)
End With
End Sub
End Class