none
ListBox.Seletect.Index = 0 nicht möglich?? RRS feed

  • Frage

  • Hallo,

    ich habe eine ListBox in der alle installierte Sprachen aufgelistet werden. Der Inhalt kann also auf jedem PC anders aussehen. Im konkreten Fall habe ich drei Stimmen.

    Nun wähle ich die Stimme nicht nur über die ListBox selbst aus sondern auch mit einer Taste.

    Try
                Configuration.Cbo_Voice.SelectedIndex = Configuration.Cbo_Voice.SelectedIndex + 1
    
            Catch ex As Exception
                Configuration.Cbo_Voice.SelectedIndex = 0
    
            End Try

    Pro Tastendruck wird der Wert um 1 erhöht. Wenn das nicht mehr geht versuche ich den Wert über die Chatch-Funktion auf Null zu setzen. 
    Starte ich manuell mit dem ersten Eintrag also Null und drücke dann meine Taste, geht das so lange gut, bis der letzte Wert (hier 2) erreicht ist. Dann bekomme ich die Fehlermeldung, dass der Wert = für SelectedIndex ungültig sei.

    Wie kann das sein und wie löse ich das Problem?
    Ich habe auch schon den Weg beschritten, dass ich die Anzahl der ListBox-Items zähle und so lange den Wert erhöhe, bis SelectedIndex = Anzahl meiner Einträge  - 1 ist.

    Das Ergebnis ist identisch.


    Liebe Grüße Stefan

    Mittwoch, 2. Oktober 2019 18:22

Antworten

  • Hallo Stefan,

    sicher, dass der Fehler überhaupt hier an dieser Stelle passiert? Und falls ja: An welcher Zeile genau und wie lautet die exakte und vollständige Fehlermeldung?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert Sirius32ds Donnerstag, 3. Oktober 2019 21:08
    Donnerstag, 3. Oktober 2019 06:34
    Moderator
  • Hallo Stefan,

    SelectedItem = 0 kann aber auch nicht gehen. (Es sei denn, deine Bindung ist eine List( Of Int64 ) oder ähnliches).

    In der Regel arbeite ich bei solchen Fällen über Erweiterungsmethoden, dann spart man sich die jeweilige Prüfung, ob überhaupt Elemente vorhanden sind und ob es soviele Einträge überhaupt gibt.

    Imports System.Runtime.CompilerServices
    
    Public Module Extensions
    
        <Extension> _
        Public Sub SetSelectedIndex( ByVal sender As ListBox, ByVal Index As Int32 )
            sender.SetSelectedIndex( Index, True )
        End Sub
    
        <Extension> _
        Public Sub SetSelectedIndex( ByVal sender As ListBox, ByVal Index As Int32, ByVal SelectFirstAsDefault As Boolean )
    
            If sender.Items IsNot Nothing
                If sender.Items.Count >= Index + 1 Then
                    sender.SelectedIndex = Index
                Else
                    If SelectFirstAsDefault AndAlso sender.Items.Count >= 1 Then
                        sender.SelectedIndex = 0
                    End If
                End If
            End If
    
        End Sub
    
    End Module
    

    Nutzen kann man das dann bspw. so:

    <ListBox>.SetSelectedIndex( 7850 )

    Der Aufruf würde also das Element am Index 7.850 selektieren, wenn es denn genügend Elemente gibt. Ansonsten wird das erste Element (wenn es dieses gibt) selektiert.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert Sirius32ds Mittwoch, 20. November 2019 11:31
    Freitag, 4. Oktober 2019 09:06
    Moderator

Alle Antworten

  • Hallo Stefan,

    sicher, dass der Fehler überhaupt hier an dieser Stelle passiert? Und falls ja: An welcher Zeile genau und wie lautet die exakte und vollständige Fehlermeldung?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert Sirius32ds Donnerstag, 3. Oktober 2019 21:08
    Donnerstag, 3. Oktober 2019 06:34
    Moderator
  • Hallo Stefan,

    ja an dieser Stelle und die Meldung ist, dass Seleted.Item=0 kein gültiger Wert sei.
    Ich denke aber, dass zu diesem Zeitpunkt die Listbox in der Form "Configuration" tatsächlich noch keine Einträge hatte. Habe das nun sicherheitshalber vorgeschoben und jetzt gehts.

    Danke.


    Liebe Grüße Stefan

    Donnerstag, 3. Oktober 2019 21:08
  • Hallo Stefan,

    SelectedItem = 0 kann aber auch nicht gehen. (Es sei denn, deine Bindung ist eine List( Of Int64 ) oder ähnliches).

    In der Regel arbeite ich bei solchen Fällen über Erweiterungsmethoden, dann spart man sich die jeweilige Prüfung, ob überhaupt Elemente vorhanden sind und ob es soviele Einträge überhaupt gibt.

    Imports System.Runtime.CompilerServices
    
    Public Module Extensions
    
        <Extension> _
        Public Sub SetSelectedIndex( ByVal sender As ListBox, ByVal Index As Int32 )
            sender.SetSelectedIndex( Index, True )
        End Sub
    
        <Extension> _
        Public Sub SetSelectedIndex( ByVal sender As ListBox, ByVal Index As Int32, ByVal SelectFirstAsDefault As Boolean )
    
            If sender.Items IsNot Nothing
                If sender.Items.Count >= Index + 1 Then
                    sender.SelectedIndex = Index
                Else
                    If SelectFirstAsDefault AndAlso sender.Items.Count >= 1 Then
                        sender.SelectedIndex = 0
                    End If
                End If
            End If
    
        End Sub
    
    End Module
    

    Nutzen kann man das dann bspw. so:

    <ListBox>.SetSelectedIndex( 7850 )

    Der Aufruf würde also das Element am Index 7.850 selektieren, wenn es denn genügend Elemente gibt. Ansonsten wird das erste Element (wenn es dieses gibt) selektiert.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert Sirius32ds Mittwoch, 20. November 2019 11:31
    Freitag, 4. Oktober 2019 09:06
    Moderator