none
Image.Dispose Befehl funktioniert nicht RRS feed

  • 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.

    Sonntag, 31. Oktober 2010 20:56

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

    Montag, 1. November 2010 03:33
  • 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

    Montag, 1. November 2010 21:27

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

    Montag, 1. November 2010 03:33
  • Ok jetzt leert sich zwar die picturebox aber wenn ich einen anderen Wert eingebe, erscheint immer das gleiche Bild, egal welcher Wert.
    Montag, 1. November 2010 15:30
  • 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

    Montag, 1. November 2010 21:27