Benutzer mit den meisten Antworten
Image.Dispose Befehl funktioniert nicht

Frage
-
Hi,
als kleine Spielerei hab ich ein simples Programm(in VB 2010) geschrieben, dass mir einfach 3 Zahlen (Ergebnisse von Sportdisziplinen) addiert und dem entsprechend Urkunden vergibt.
Ich habe eine picturebox eingefügt in der ein entsprechendes Bild angezeigt wird.
Dann gibt es noch einen clear button.
Die Textfelder werden anstandslos geleert aber meine picturebox bleibt voll.
Weiß jemand woran das liegt?
Hier ist auf jeden Fall mal der gesamte Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a, b, c As Integer Dim Gewinner As New Bitmap("C:\Users\Julian\Pictures\Gewinner-Fahrschule-Roth.jpg") Dim Verlierer As New Bitmap("C:\Users\Julian\Pictures\loser.jpg") Dim Urkunde As New Bitmap("C:\Users\Julian\Pictures\38110_Urkunde.jpg") With PictureBox1() End With If Not Integer.TryParse(TextBox1.Text, a) Then Label1.Text = "Ungültiger Wert!" Label4.Text = "" Exit Sub Else : Label1.Text = "Springen" End If If Not Integer.TryParse(TextBox2.Text, b) Then Label2.Text = "Ungültiger Wert!" Label4.Text = "" Exit Sub Else : Label2.Text = "Werfen" End If If Not Integer.TryParse(TextBox3.Text, c) Then Label3.Text = "Ungültiger Wert!" Label4.Text = "" Exit Sub Else : Label3.Text = "Laufen" End If Label5.Text = a + b + c If 20 < a + b + c <= 40 Then Label4.Text = "Es gibt keine Urkunde!" End If If 40 < a + b + c < 80 Then Label4.Text = "Es gibt eine Urkunde!" End If If a + b + c < 20 Then Label4.Text = "DU BIST SCHLECHT!!!Erwartest du allenernstes ein Urkunde?" End If If a + b + c > 80 Then Label4.Text = "GUTE LEISTUNG!!!Es gibt eine Urkunde!" End If If a + b + c > 80 Then PictureBox1.Image = Gewinner End If If a + b + c < 20 Then PictureBox1.Image = Verlierer End If If 40 < a + b + c < 80 Then PictureBox1.Image = Urkunde End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox1.Clear() TextBox2.Clear() TextBox3.Clear() End Sub
Im Vorraus schon mal Danke.
- Bearbeitet Robert BreitenhoferModerator Freitag, 3. Dezember 2010 14:34 Formatierung
Antworten
-
Hi,
eine Form, einen Button ("button2") eine picturebox ("picturebox1") eine textbox ("textbox1"):
Public Class Form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox1.Clear() 'nur verwenden, wenn die Bild-Variable wirklich verworfen werden soll Me.PictureBox1.Image.Dispose() 'das ist das Entscheidende Me.PictureBox1.Image = Nothing 'evtl noch Me.PictureBox1.Refresh() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim bmp As New Bitmap(200, 200) Using g As Graphics = Graphics.FromImage(bmp) g.Clear(Color.Blue) End Using Me.PictureBox1.Image = bmp End Sub End Class
Regards,
Thorsten
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 14:34
-
Wie weist Du denn denn neuen Wert zu?
Einfach ein Image-Object der Image-Property der PictureBox zuweisen: Eine Form, eine Picturebox, eine Listbox (Standardnamen unverändert):
Public Class Form1 Private _curDir As String = "" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.PictureBox1.SizeMode = PictureBoxSizeMode.Zoom 'Eigene Bilder, ändern wenn dort keine jpeg-Pics sind _curDir = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) Dim dir As IO.DirectoryInfo = New IO.DirectoryInfo(_curDir) 'nur jpeg-pics For Each fi As IO.FileInfo In dir.GetFiles("*.jpg") Me.ListBox1.Items.Add(fi.Name) Next End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged If Me.ListBox1.Items.Count > 0 Then 'altes Bild verwerfen If (Not Me.PictureBox1.Image Is Nothing) Then Me.PictureBox1.Image.Dispose() End If 'neues Bild zuweisen Me.PictureBox1.Image = Image.FromFile(IO.Path.Combine(_curDir, Me.ListBox1.SelectedItem.ToString())) End If End Sub End Class
Viele Grüße,
Thorsten
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 14:34
Alle Antworten
-
Hi,
eine Form, einen Button ("button2") eine picturebox ("picturebox1") eine textbox ("textbox1"):
Public Class Form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox1.Clear() 'nur verwenden, wenn die Bild-Variable wirklich verworfen werden soll Me.PictureBox1.Image.Dispose() 'das ist das Entscheidende Me.PictureBox1.Image = Nothing 'evtl noch Me.PictureBox1.Refresh() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim bmp As New Bitmap(200, 200) Using g As Graphics = Graphics.FromImage(bmp) g.Clear(Color.Blue) End Using Me.PictureBox1.Image = bmp End Sub End Class
Regards,
Thorsten
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 14:34
-
Wie weist Du denn denn neuen Wert zu?
Einfach ein Image-Object der Image-Property der PictureBox zuweisen: Eine Form, eine Picturebox, eine Listbox (Standardnamen unverändert):
Public Class Form1 Private _curDir As String = "" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.PictureBox1.SizeMode = PictureBoxSizeMode.Zoom 'Eigene Bilder, ändern wenn dort keine jpeg-Pics sind _curDir = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) Dim dir As IO.DirectoryInfo = New IO.DirectoryInfo(_curDir) 'nur jpeg-pics For Each fi As IO.FileInfo In dir.GetFiles("*.jpg") Me.ListBox1.Items.Add(fi.Name) Next End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged If Me.ListBox1.Items.Count > 0 Then 'altes Bild verwerfen If (Not Me.PictureBox1.Image Is Nothing) Then Me.PictureBox1.Image.Dispose() End If 'neues Bild zuweisen Me.PictureBox1.Image = Image.FromFile(IO.Path.Combine(_curDir, Me.ListBox1.SelectedItem.ToString())) End If End Sub End Class
Viele Grüße,
Thorsten
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 14:34