Combobox Item Auswahl

  • VB.NET

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

    Combobox Item Auswahl

    Hallo liebe Gemeinde.

    Ich bin Anfänger bei VB 2012.

    Ich habe 2 Comboboxen die ich mit einem Array aus einer .dll gefüllt habe im Load Ereigniss.
    In den Comboboxen stehen Zahlen von 1947 bis 2011.

    With Me.ComboBox1

    For z = 1 To UBound(arr, 2) 'Ubount höchster Index Array
    Me.ComboBox1.Items.Add(arr(0, z))
    Next
    End With

    With Me.ComboBox2

    For z = 1 To UBound(arr, 2) 'Ubount höchster Index Array
    Me.ComboBox2.Items.Add(arr(0, z))
    Next
    End With

    Wie bekomme ich es hin, das wenn ich in Combobox1 das Jahr Bsp. 1990 auswähle, die Combobox2 mir dann nur alle übrigen Zahlen ab 1991 anzeigt?

    Vielen herzlichen Dank im vorraus.
    Hi, und willkommen im Forum
    da hast du zwei möglichkeiten
    1. Wenn du in der DLL die Daten über ein SQL Befehl aufrufst, pass den SQL String an mit einer where bedingung
    2. Du nimmst dir den Datenwert, und vergleichst diesen ob der größer ist, als der ausgewählte datensatz.

    verstehst du das grob, wie ich das meine ?

    Gruß
    oder änderst einfach die Füllanweisung der 2. Combobox



    VB.NET-Quellcode

    1. With Me.ComboBox2
    2. dim auswahl as integer
    3. auswahl = combobox1.index 'hab gerade kein VB zur hand, musst mal testen welcher Eigenschaft dir den Index des ausgewählten Jahres entspricht
    4. ' ich glaube der Wert von 1990 ist wenn der Index bei 0 anfängt dann 43, den wert gibst du einfach an deine 2. combox weiter wenn sie bestückt wird.
    5. For z= auswahl To UBound(arr, 2) 'Ubount höchster Index Array
    6. Me.ComboBox2.Items.Add(arr(0, z))
    7. Next
    8. End With
    Willkommen im Forum,

    Das kann man z.B. so machen:

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. ComboBox2.Items.Clear()
    3. For i As Integer = ComboBox1.SelectedIndex + 1 To ComboBox1.Items.Count - 1
    4. ComboBox2.Items.Add(ComboBox1.Items(i).ToString)
    5. Next
    6. End Sub


    Wenn du "With, End With" nutzen möchtest geht das so:

    VB.NET-Quellcode

    1. With ComboBox1
    2. .Items.Add("???")
    3. .Items.Add("???")
    4. .SelectedIndex = 0
    5. End With


    Das with nutzt man in dem Beispiel um, Combobox1 nicht in jeder Zeile schreiben zu müssen, also bei mehreren Combobox functionen hintereinander.

    mfG

    Derfuhr
    @De Chris:
    versuche es einmal in der Art:

    VB.NET-Quellcode

    1. Dim L1 As New List(Of Integer) From {1999, 2000, 2001, 2002, 2003}
    2. ComboBox1.DataSource = l1' Binden der ComboBox1 an die Liste L1
    3. Dim Jahr = 2000' Beispiel für die Auswahl der ComboBox1
    4. Dim L2 = l1.Where(Function(j) j > Jahr).ToArray
    5. ComboBox2.DataSource = l2' Beim Event SelectedValueChanged die ComboBox2 wieder an die neue Liste L2 binden
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    ComboBox2.Items.Clear()
    For i As Integer = ComboBox1.SelectedIndex + 1 To ComboBox1.Items.Count - 1
    ComboBox2.Items.Add(ComboBox1.Items(i).ToString)
    Next
    End Sub


    Vielen herzlichen Dank. Hat auf anhieb gleich funktioniert!!!

    hier nocheinmal in einen ganzen Zusammenhang:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim L1 As New List(Of Integer) From {1999, 2000, 2001, 2002, 2003}
    3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. ComboBox1.DataSource = L1
    5. End Sub
    6. Private Sub cbx(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    7. ComboBox2.DataSource = L1.Where(Function(j) j > Convert.ToInt32(ComboBox1.SelectedValue)).ToArray
    8. End Sub
    9. End Class
    Und die TypUmwandlung kann man auch noch einsparen:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim L1 As New List(Of Integer) From {1999, 2000, 2001, 2002, 2003}
    3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. ComboBox1.DataSource = L1
    5. End Sub
    6. Private Sub cbx(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    7. ComboBox2.DataSource = L1.Where(Function(j) j > L1(ComboBox1.SelectedIndex)).ToArray
    8. 'oder - da L1 ja sortiert ist:
    9. ComboBox2.DataSource = L1.Skip(ComboBox1.SelectedIndex).ToArray
    10. End Sub
    11. End Class
    TypUmwandlungen sind immer riskant, denn das umgewandelte Objekt kann ja auch was anneres sein.
    In Combo1 könnte theoretisch ja auch "Hallo" eingespeist sein. Hingegen in L1 ist das nicht möglich.
    Danke für deinen Hinweis - an diese Feinheit habe ich hier jetzt nicht gedacht.
    Bei der .Skip-Variante ist mir aufgefallen, dass man da den Index um 1 erhöhen muss,
    damit das Listenergebnis zur ersten Variante übereinstimmt...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()