Gå til innhold

Enkle eksempler på tegning i VB .NET


Anbefalte innlegg

Jeg har programmert i VB 6.0 i lengre tid nå, og arbeider for tiden med å lære VB .NET 2005 og oppgradere en av mine applikasjoner til dette nye språket. Dette går fint, men jeg sitter fast ved grafikk-delen.

 

Kan noen bidra med enkle eksempel på kodesnutter som fungerer på samme måte som følgende (i VB 6.0):

 

.Pset (X,Y) 'Dott

.Line - (X,Y) 'Følger musen (og annet)

.Line (X,Y)-(X,Y) 'Linje fra XY til XY

.Line (X,Y)-(X,Y), Farge, BF 'Firkant

.Circle (X,Y),Farge ' (denne kan være litt feil, men poenget er at den lager sirkler)

 

Takk

Endret av Degeim
Lenke til kommentar
Videoannonse
Annonse

Når en skal tegne i VB.NET må du tegne i enten OnPaint suben, eller bruke Paint event.

 

Denne gir et parameter (e As PaintEventArgs)

som har en egenskap som heter Graphics, denne tegner du på.

Når du vil tvinge programmet til å tegne på nytt, kaller du Invalidate().

 

eks:

Private Sub DoPaint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
 With e.Graphics
   .FillRectangle(Brushes.Blue, 32, 32, 160, 160) ' Line, BF
   .DrawLine(Pens.Black, 32, 32, 128, 128)  ' Vanlig linje
   .DrawEllipse(Pens.Black, 32, 32, 127, 127)  ' Sirkel
 End With
End Sub

 

For å tegne linje etter musen, kan vi ikke bruke Paint, eller, det går, men blir unødvendig komplisert.

Da bruker man CreateGraphics() funksjonen

 

Private XX As Integer
   Private YY As Integer
   Private g As Graphics ' Grafikk objektet vi skal tegne med

   Private Sub Form_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseDown
       XX = e.X
       YY = e.Y
       g = Me.CreateGraphics() ' Lag et grafikk objekt
   End Sub

   Private Sub Form_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove
       If e.Button = MouseButtons.Left Then g.DrawLine(Pens.Black, XX, YY, e.X, e.Y)
       XX = e.X
       YY = e.Y
   End Sub

   Private Sub Form_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseUp
       g.Dispose()
       g = Nothing
   End Sub

 

Farger i VB.NET er ikke lenger et heltall, men et Color objekt

Denne består av fire verdier, R, G, B og A (som er ugjennomsiktighet, dvs. 255 er helt synlig, 0 er gjennomsiktig)

Du kan kalle constructor for å lage en farge runtime.

 

Farger kan brukes i brushes (SolidBrush, LinearGradientBrush, PathLinearGradientFill og HatchBrush) og Pens.

Men du kan ikke endre på pennene i Pens eller SystemPens objektet, så da må du lage en selv

Dim MyPen As Pen = New Pen(SystemColors.Control) f.eks.

samme gjelder brushes.

 

Pen kan også ha en brush forresten.

 

Brush eksempel:

 

Private Sub DrawLinearGradient(ByVal g As Graphics)
       g.FillRectangle(New Drawing.Drawing2D.LinearGradientBrush(New Point(32, 32), New Point(32, 160), Color.Transparent, Color.AliceBlue), New Rectangle(32, 32, 128, 128))
   End Sub
   Private Sub DrawHatchBrush(ByVal g As Graphics)
       g.FillRectangle(New Drawing2D.HatchBrush(Drawing2D.HatchStyle.Cross, Color.FromArgb(32, 255, 255, 0), Color.Transparent), New Rectangle(32, 32, 128, 128))
   End Sub

 

Slik vil da hele koden se ut:

Private Sub DoPaint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
       With e.Graphics
           .FillRectangle(Brushes.Blue, 32, 32, 128, 128) ' Line, BF
           .DrawLine(Pens.Black, 32, 32, 160, 160)  ' Vanlig linje
           .DrawEllipse(Pens.Black, 32, 32, 127, 127)  ' Sirkel
       End With
       DrawLinearGradient(e.Graphics)
       DrawHatchBrush(e.Graphics)
   End Sub
   Private XX As Integer
   Private YY As Integer
   Private g As Graphics ' Grafikk objektet vi skal tegne med

   Private Sub Form_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseDown
       XX = e.X
       YY = e.Y
       g = Me.CreateGraphics() ' Lag et grafikk objekt
   End Sub

   Private Sub Form_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove
       If e.Button = MouseButtons.Left Then g.DrawLine(Pens.Black, XX, YY, e.X, e.Y)
       XX = e.X
       YY = e.Y
   End Sub

   Private Sub Form_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseUp
       g.Dispose()
       g = Nothing
   End Sub

   Private Sub DrawLinearGradient(ByVal g As Graphics)
       g.FillRectangle(New Drawing.Drawing2D.LinearGradientBrush(New Point(32, 32), New Point(32, 160), Color.Transparent, Color.AliceBlue), New Rectangle(32, 32, 128, 128))
   End Sub
   Private Sub DrawHatchBrush(ByVal g As Graphics)
       g.FillRectangle(New Drawing2D.HatchBrush(Drawing2D.HatchStyle.Cross, Color.FromArgb(32, 255, 255, 0), Color.Transparent), New Rectangle(32, 32, 128, 128))
   End Sub

 

Sjekk resultatet, og finn ut hvordan de forskjellige klassene fungerer.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...