Hallo liebes Forum,
ich habe ein neues Testprojekt erstellt, in dem ich ein zweites Form und darauf eine PictureBox erstelle. Trotz warnt mich VisualStudio, dass die beiden nie gelöscht werden. Bei den Diagnosetools sieht es auch so aus.
Ich will erst das zweite Form löschen, wenn der dazugehörige Button2 gedrückt wird. Mit Using / End Using verschwindet ja alles wieder sofort. Und ich will die Sub nicht lang aufhalten...
Als Button2 gedrückt wurde und der Befehl kam, sieht man an der gelben Markierung in den Diagnosetools, dass nichts passiert.
Was kann ich tun?
ich habe ein neues Testprojekt erstellt, in dem ich ein zweites Form und darauf eine PictureBox erstelle. Trotz warnt mich VisualStudio, dass die beiden nie gelöscht werden. Bei den Diagnosetools sieht es auch so aus.
Ich will erst das zweite Form löschen, wenn der dazugehörige Button2 gedrückt wird. Mit Using / End Using verschwindet ja alles wieder sofort. Und ich will die Sub nicht lang aufhalten...
Als Button2 gedrückt wurde und der Befehl kam, sieht man an der gelben Markierung in den Diagnosetools, dass nichts passiert.
Was kann ich tun?
VB.NET-Quellcode
- Public NotInheritable Class Form1
- Private ReadOnly Screens As Screen() = Screen.AllScreens
- Private ReadOnly PBox2BS As New PictureBox()
- Private ReadOnly Form2 As New Form
- Private HasBeenDisposed As Boolean = False
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Me.BackColor = Color.FromArgb(50, 168, 82)
- Button1.BackColor = Color.FromArgb(181, 255, 120)
- Button1.Text = $"prüfen, ob Bildschirm 2 da ist und zweites Form erstellen"
- Button2.BackColor = Color.FromArgb(255, 168, 61) 'Hellorange
- Button2.Text = $"Form2 und PictureBox entfernen"
- Button2.Enabled = False 'damit man nicht Form2 aus Versehen zu früh disposet
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- If Screens.Count = 2 Then
- Initialize_new_Form_and_PictureBox()
- Button2.Enabled = True
- Else
- Exit Sub
- End If
- End Sub
- Private Sub Initialize_new_Form_and_PictureBox()
- If HasBeenDisposed Then
- Exit Sub
- End If
- Form2.Show()
- Form2.BackColor = Color.FromArgb(158, 244, 255)
- Form2.FormBorderStyle = FormBorderStyle.None
- Form2.Location = New Point(Screens(1).Bounds.X, Screens(1).Bounds.Y)
- Form2.Size = New Size(Screens(1).Bounds.Width, Screens(1).Bounds.Height)
- Form2.Controls.Add(PBox2BS)
- PBox2BS.Location = New Point(0, 0)
- PBox2BS.Size = New System.Drawing.Size(Screens(1).Bounds.Width, Screens(1).Bounds.Height)
- PBox2BS.Visible = True
- PBox2BS.BackColor = Color.Black
- PBox2BS.BorderStyle = BorderStyle.None
- PBox2BS.SizeMode = PictureBoxSizeMode.StretchImage
- PBox2BS.Image = New Bitmap("C:\Users\meinPfad.png")
- End Sub
- Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
- PBox2BS.Dispose()
- Form2.Dispose()
- HasBeenDisposed = True
- GC.Collect()
- End Sub
- Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
- PBox2BS.Dispose()
- Form2.Dispose()
- End Sub
- End Class
An die Neulinge: Nutzt
Option Strict On
und Option Infer Off
. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.