Už jsem to vyřešil ale potřebuji vědět, když mám kód pro nastavení čáry kterou kreslím ( Dim drawWidth As Integer = TextBox1.Text ' šířka kreslené čáry ) a ve form1_load : TextBox1.Text = "5", ukáže to chybu: Při vytváření formuláře došlo k chybě. Podrobnosti viz Exception.InnerException. Chyba: Odkaz na objekt není nastaven na instanci objektu. Co s tím? A kód je takový (je to celé):
Public Class Form1
Dim grp As Drawing.Graphics ' nabízí provádění grafických operací
Dim TBitmap As Drawing.Bitmap ' uložistě grafického obsahu tabule
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TBitmap = New Bitmap(PicTabule.Width, PicTabule.Height) ' inicializujeme nový objekt Bitmap s velikostí tabule
grp = Graphics.FromImage(TBitmap) ' navážeme na TBitmap objekt grp, který umožní vykreslování
grp.Clear(Color.Black) ' nastavíme barvu tabule na černou
grp.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias ' aktivujeme vyhlazování čar
TextBox1.Text = "5"
End Sub
Private Sub PicTabule_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PicTabule.Paint
' vykreslíme obsah TBitmap na formulář do PicTabule
e.Graphics.DrawImage(TBitmap, 0, 0)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
grp.Clear(Color.Black) ' smažeme tabuli
PicTabule.Invalidate() ' a překreslíme ji
End Sub
Dim PosledniBod As Point ' bude potřeba si pamatovat poslední bod, kam se kreslilo
Dim drawWidth As Integer = TextBox1.Text ' šířka kreslené čáry
Dim drawColor As Color = Color.White ' barva štětce
Dim Kresleni As Boolean ' aktivuje se stisknutím levého tlačítka na kreslící tabuli a indikuje začátek kreslení
Private Sub PicTabule_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PicTabule.MouseDown
If e.Button = Windows.Forms.MouseButtons.Left Then
PosledniBod = e.Location ' počátek kreslení je nyní nastaven jako pozice myši
grp.FillEllipse(New Pen(drawColor).Brush, New RectangleF(e.X - drawWidth / 2, e.Y - drawWidth / 2, drawWidth, drawWidth)) ' vykreslíme první bod (zakulacení počátku čáry)
PicTabule.Invalidate() ' nechame překreslit PicTabule
Kresleni = True ' aktivujeme kreslici moc
End If
End Sub
Private Sub PicTabule_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PicTabule.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left And Kresleni = True Then
grp.DrawLine(New Pen(drawColor, drawWidth), PosledniBod, e.Location) ' vykreslíme čáru z posledního bodu, kde byla myš
grp.FillEllipse(New Pen(drawColor).Brush, New RectangleF(e.X - drawWidth / 2, e.Y - drawWidth / 2, drawWidth, drawWidth)) ' vykreslíme zakončovací bod (zakulacení konce čáry)
PicTabule.Invalidate() ' nechame překreslit PicTabule
PosledniBod = e.Location ' poslední bod, ze kterého se kreslilo je nyní opět aktuální pozice myši
End If
End Sub
Private Sub PicTabule_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PicTabule.MouseUp
If e.Button = Windows.Forms.MouseButtons.Left Then
Kresleni = False ' puštěním levého tlačítka myši opouštíme kreslící mód
End If
End Sub
End Class
|