サーチ…


グラフィックオブジェクトの作成

グラフィックスオブジェクトを作成する方法は3つあります

  1. ペイントイベントから

コントロールが再描画されるたびに(サイズ変更、リフレッシュなど)、このイベントが呼び出されます。コントロールでコントロールを常に描画する場合は、この方法を使用します

   '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. グラフィックの作成

これは、コントロールで1回のグラフィックを作成する場合や、コントロール自体を再描画したくない場合によく使用されます

   Dim btn as New Button
   Dim g As Graphics = btn.CreateGraphics
  1. 既存のグラフィックから

既存のグラフィックを描画して変更する場合は、このメソッドを使用します

   '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つのパラメータを受け取ります。

  1. ペンの色またはブラシ
  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はシェイプを描画し、与えられた色で塗りつぶします。塗りつぶしの形を使用できます

  1. 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
    
  2. 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)
  1. 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)
    
  2. 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 ToolLinearGradientBrushは次のステートメントをインポートします: 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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow