SelectedIndexChanged

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    SelectedIndexChanged

    Guten morgen

    habe ein kleines problem

    Habe eine Listbox dort wird mir der Pfad von Bildern angezeigt.
    Klicke ich in der Listbox auf einen anderen eintrag wird mir auch in der Picturebox das andere Bild angezeigt.

    Code

    VB.NET-Quellcode

    1. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    2. Me.PictureBox1.ImageLocation = Me.ListBox1.SelectedItem


    Soweit ist das ausführen mit einer Listbox und Picturebox OK funktioniert alles.

    Jetzt wollte ich das mit einer Listview umsetzen das funktioniert nicht. Kann mir da jemand weiterhelfen
    da es ja mit SelectedItem nicht geht.

    Danke euch
    Warum sollte es nicht mit ListView klappen? Es hat eben nicht SelectedIndex, sondern SelectedIndices -> SelectedIndices(0) = Index des ersten selektierten Items.
    btw: Warum ListView X/ ?
    und: ListBox+Pfade-Thread
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Sorry, meine Glaskugel ist aufgrund spontaner Selbsteintrübung beim Hersteller.
    Da Du keinen Code gepostet hast, konnte ich schlecht ne Auskunft darüber geben, wie Du ihn korrigieren musst.
    Bevor Du SelectedIndices nutzt, solltest Du erstmal überprüfen, wieviele SelectedItems das LV überhaupt hat. Ist ListView1.SelectedIndices.Count = 0, wäre es ziemlich ungeschickt zu versuchen, SelectedIndices zu indizieren, da:
    Wenn Count = 0, dann ist SelectedIndices = Nothing und damit wirft SelectedIndices(0) die o.g. Exception.
    Allerdings wird Dir mit dem gezeigten Screenshotcode eh nur Mus entstehen. SelectedIndices(0) gibt den Listenindex des selektierten LV-Eintrags wieder, also eine Zahl größer gleich Null. Du willst aber wahrscheinlich eher den LV-Eintrag selbst, der an jener Position steht. Dann arbeite mit SelectedItems(0). Allerdings: Ein LV-Eintrag besteht aus mehreren SubItems. Musst den richtigen auswählen, standardmäßig entweder ListView1.SelectedItems(0).SubItems(0).Text oder nur kurz ListView1.SelectedItems(0).Text.
    Aber vielleicht besser doch bei der ListBox bleiben oder ein DataGridView nutzen, wenn Du wirklich mehrere Spalten benötigst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hi
    Option Strict zum Ersten und du musst abfragen, ob überhaupt ein Element ausgewählt wurde. Normalerweise würde man aber auf die FocusedItem-Eigenschaft zurückgreifen oder alle Elemente verwenden, die ausgewählt wurden, niemals nur eines, sofern du mehrfache Auswahlen nicht unterbindest.

    Du solltest außerdem unbedingt lernen, solche Sachen selbst herauszufinden. Die Exception-Texte sind ja nicht umsonst verständlich beschrieben.

    Viele Grüße
    ~blaze~
    Mahlzeit

    habe es mal so umgesetzt und bis jetzt funktioniert es

    VB.NET-Quellcode

    1. Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
    2. If (ListView1.Items.Count = 0) Then Return
    3. If (ListView1.SelectedItems.Count = 0) Then Return
    4. If (ListView1.SelectedItems(0).SubItems.Count < 1) Then Return
    5. PictureBox9.ImageLocation = ListView1.SelectedItems(0).SubItems(0).Text
    6. End Sub


    Es wird ein Bild angezeigt und beim Changed auf einen anderen Eintrag wird das andere Bild angezeigt
    @manni4545 Vor dem Zuweisen eines neuen Bildes solltest Du unbedingt das alte Bild disposen, sonst hast Du ein MemoryLeak:

    VB.NET-Quellcode

    1. If PictureBox9.Image IsNot Nothing Then
    2. PictureBox9.Image.Dispose()
    3. End If
    4. PictureBox9.ImageLocation = ListView1.SelectedItems(0).SubItems(0).Text
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn ListView1.Items.Count = 0, kann auch ListView.SelectedItems.Count nicht > 0 sein. ;)

    Aber nochmal. Wenn du vorhast, nur ein Bild anzuzeigen, dann verwende die FocusedItem-Eigenschaft. Das beinhaltet jenes Element, um das der Fokus-Rahmen gezeichnet wird (war beim alten Windows die gepunktete Linie, beim neuen ist es das nochmal stärker hervorgehobene Item).

    Viele Grüße
    ~blaze~