Visual Basic .NET Language
GDI +
サーチ…
グラフィックオブジェクトの作成
グラフィックスオブジェクトを作成する方法は3つあります
- ペイントイベントから
コントロールが再描画されるたびに(サイズ変更、リフレッシュなど)、このイベントが呼び出されます。コントロールでコントロールを常に描画する場合は、この方法を使用します
'this will work on any object's paint event, not just the form
Private Sub Form1_Paint(sender as Object, e as PaintEventArgs) Handles Me.Paint
Dim gra as Graphics
gra = e.Graphics
End Sub
- グラフィックの作成
これは、コントロールで1回のグラフィックを作成する場合や、コントロール自体を再描画したくない場合によく使用されます
Dim btn as New Button
Dim g As Graphics = btn.CreateGraphics
- 既存のグラフィックから
既存のグラフィックを描画して変更する場合は、このメソッドを使用します
'The existing image can be from a filename, stream or Drawing.Graphic
Dim image = New Bitmap("C:\TempBit.bmp")
Dim gr As Graphics = Graphics.FromImage(image)
図形を描く
ペンオブジェクトを定義する必要があるシェイプの描画を開始するには、 Pen
は2つのパラメータを受け取ります。
- ペンの色またはブラシ
- ペンの幅
ペンオブジェクトは、描画したいオブジェクトのアウトラインを作成するために使用されます
ペンの定義後、ペンのプロパティを設定することができます
Dim pens As New Pen(Color.Purple)
pens.DashStyle = DashStyle.Dash 'pen will draw with a dashed line
pens.EndCap = LineCap.ArrowAnchor 'the line will end in an arrow
pens.StartCap = LineCap.Round 'The line draw will start rounded
'*Notice* - the Start and End Caps will not show if you draw a closed shape
次に、作成したグラフィックスオブジェクトを使用して図形を描画します
Private Sub GraphicForm_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
Dim pen As New Pen(Color.Blue, 15) 'Use a blue pen with a width of 15
Dim point1 As New Point(5, 15) 'starting point of the line
Dim point2 As New Point(30, 100) 'ending point of the line
e.Graphics.DrawLine(pen, point1, point2)
e.Graphics.DrawRectangle(pen, 60, 90, 200, 300) 'draw an outline of the rectangle
デフォルトでは、ペンの幅は1に等しい
Dim pen2 as New Pen(Color.Orange) 'Use an orange pen with width of 1
Dim origRect As New Rectangle(90, 30, 50, 60) 'Define bounds of arc
e.Graphics.DrawArc(pen2, origRect, 20, 180) 'Draw arc in the rectangle bounds
End Sub
塗りつぶしの形
Graphics.FillShapesはシェイプを描画し、与えられた色で塗りつぶします。塗りつぶしの形を使用できます
Brush
ツール - ソリッドカラーで図形を塗りつぶすDim rect As New Rectangle(50, 50, 50, 50) e.Graphics.FillRectangle(Brushes.Green, rect) 'draws a rectangle that is filled with green e.Graphics.FillPie(Brushes.Silver, rect, 0, 180) 'draws a half circle that is filled with silver
HatchBrush
ツール - パターンで図形を塗りつぶす
Dim hBrush As New HatchBrush(HatchStyle.ZigZag, Color.SkyBlue, Color.Gray)
'creates a HatchBrush Tool with a background color of blue, foreground color of gray,
'and will fill with a zigzag pattern
Dim rectan As New Rectangle(100, 100, 100, 100)
e.Graphics.FillRectangle(hBrush, rectan)
LinearGradientBrush
- グラデーションで図形を塗りつぶすDim lBrush As New LinearGradientBrush(point1, point2, Color.MediumVioletRed, Color.PaleGreen) Dim rect As New Rectangle(50, 50, 200, 200) e.Graphics.FillRectangle(lBrush, rect)
TextureBrush
- 図形で図形を塗りつぶす
リソース、既に定義されているビットマップ、またはファイル名から画像を選択できます
Dim textBrush As New TextureBrush(New Bitmap("C:\ColorPic.jpg"))
Dim rect As New Rectangle(400, 400, 100, 100)
e.Graphics.FillPie(textBrush, rect, 0, 360)
LinearGradientBrush
Hatch Brush Tool
とLinearGradientBrush
は次のステートメントをインポートします: Imports System.Drawing.Drawing2D
テキスト
フォームにテキストを描画するには、 DrawString
メソッドを使用しDrawString
文字列を描くときは、上記の4つのブラシのいずれかを使用できます
Dim lBrush As New LinearGradientBrush(point1, point2, Color.MediumVioletRed, Color.PaleGreen)
e.Graphics.DrawString("HELLO", New Font("Impact", 60, FontStyle.Bold), lBrush, New Point(40, 400))
'this will draw the word "Hello" at the given point, with a linearGradient Brush
テキストの幅や高さを定義することはできないので、テキストをMeasure Text
してテキストサイズを確認してください
Dim lBrush As New LinearGradientBrush(point1, point2, Color.MediumVioletRed, Color.PaleGreen)
Dim TextSize = e.Graphics.MeasureString("HELLO", New Font("Impact", 60, FontStyle.Bold), lBrush)
'Use the TextSize to determine where to place the string, or if the font needs to be smaller
例: "Test"という単語をフォームの上に描画する必要があります。フォームの幅は120です。このループを使用して、フォームの幅に収まるようにフォントサイズを縮小します
Dim FontSize as Integer = 80
Dim TextSize = e.graphics.measeString("Test", New Font("Impact",FontSize, FontStyle.Bold), new Brush(colors.Blue, 10)
Do while TextSize.Width >120
FontSize = FontSize -1
TextSize = e.graphics.measeString("Test", New Font("Impact",FontSize, FontStyle.Bold), new Brush(colors.Blue, 10)
Loop