keuze combobox onthouden bij wijzigingen keuzeopties

Status
Niet open voor verdere reacties.

dezilk

Gebruiker
Lid geworden
25 sep 2005
Berichten
41
Beste allemaal,

Ik heb twee comboboxen waarvan de keuzemogelijkheden van de tweede combobox afhankelijk zijn van de keuze in de eerste combobox. Tot zover is het me gelukt, maar als ik in de eerste combobox de keuze wijzig is hij de keuze van de tweede steeds vergeten. Terwijl ik graag wil dat de keuze geselecteerd blijft tenzij dit door de wijziging geen keuze meer is. Weet iemand hoe?

Alvast bedankt,

Wim
 
Kun je daar wat meer informatie bij geven?
Ik neem aan dat je in de SelectedIndexChanged event handler van de ene combobox
al zelf iets doet waardoor de selectie van de andere combobox teniet wordt gedaan?
 
aanpak tot nu toe

Ik heb tot nu toe een formulier met daarop het volgende

combobox1
combobox2
richtextbox1

met daarbij de volgende code:

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.BackColor = Color.LightGray
ComboBox1.Items.Add("A")
ComboBox1.Items.Add("B")
ComboBox1.Items.Add("C")
End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
ComboBox2.Items.Clear()
If ComboBox1.SelectedIndex = 0 Then
ComboBox2.Items.Add("A.1")
ComboBox2.Items.Add("A.2")
ComboBox2.Items.Add("A.3")
End If
If ComboBox1.SelectedIndex = 1 Then
ComboBox2.Items.Add("B.1")
ComboBox2.Items.Add("B.2")
ComboBox2.Items.Add("B.3")
End If
If ComboBox1.SelectedIndex = 2 Then
ComboBox2.Items.Add("C.1")
ComboBox2.Items.Add("C.2")
ComboBox2.Items.Add("C.3")
End If
End Sub
Private Sub ComboBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.TextChanged
If ComboBox2.Text = "A.1" Then : RichTextBox1.Text = "A1"
ElseIf ComboBox2.Text = "A.2" Then : RichTextBox1.Text = "A2"
ElseIf ComboBox2.Text = "A.3" Then : RichTextBox1.Text = "A3"

ElseIf ComboBox2.Text = "B.1" Then : RichTextBox1.Text = "B1"
ElseIf ComboBox2.Text = "B.2" Then : RichTextBox1.Text = "B2"
ElseIf ComboBox2.Text = "B.3" Then : RichTextBox1.Text = "B3"

ElseIf ComboBox2.Text = "C.1" Then : RichTextBox1.Text = "C1"
ElseIf ComboBox2.Text = "C.2" Then : RichTextBox1.Text = "C2"
ElseIf ComboBox2.Text = "C.3" Then : RichTextBox1.Text = "C3"
End If
End Sub
End Class


waar ik graag in het voorgaande vermelde functionaliteiten in wil bouwen. (ik ben een beginner)

Alvast bedankt,

Wim
 
Je kunt dit eens proberen:

Code:
Public Class Form1

    Dim Keuze1(3) As String
    Dim Keuze2(9) As String

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Dim hstrKeuze1 As String
        Dim hstrKeuze2 As String
        Dim i As Integer

        hstrKeuze1 = ComboBox1.Items(ComboBox1.SelectedIndex)

        If ComboBox2.Items.Count > 0 Then
            hstrKeuze2 = ComboBox2.Items(ComboBox2.SelectedIndex)
        Else
            hstrKeuze2 = ""
        End If

        If Not Keuze2_past_bij_Keuze1(hstrKeuze1, hstrKeuze2) Then
            ComboBox2.Items.Clear()
            For i = 1 To 9
                If Keuze2_past_bij_Keuze1(hstrKeuze1, Keuze2(i)) Then
                    ComboBox2.Items.Add(Keuze2(i))
                End If
            Next i
            ComboBox2.SelectedIndex = 0
        End If
    End Sub

    Private Sub VulAlleKeuzesVooraf()
        'Eigenlijk zouden die keuzes in een database tabelletje moeten...
        Keuze1(1) = "A"
        Keuze1(2) = "B"
        Keuze1(3) = "C"

        Keuze2(1) = "A.1"
        Keuze2(2) = "A.2"
        Keuze2(3) = "A.3"
        Keuze2(4) = "B.1"
        Keuze2(5) = "B.2"
        Keuze2(6) = "B.3"
        Keuze2(7) = "C.1"
        Keuze2(8) = "C.2"
        Keuze2(9) = "C.3"

    End Sub

    Private Function Keuze2_past_bij_Keuze1(ByVal iKeuze1 As String, ByVal iKeuze2 As String) As Boolean
        'Hier je logica volgens welke de eerste en de tweede keuze bijelkaar passen
        Keuze2_past_bij_Keuze1 = False
        If Len(iKeuze2) > 0 Then
            If Mid$(iKeuze1, 1, 1) = Mid$(iKeuze2, 1, 1) Then
                Keuze2_past_bij_Keuze1 = True
            End If
        End If
    End Function


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        Me.BackColor = Color.LightGray

        VulAlleKeuzesVooraf()
        For i = 1 To 3
            ComboBox1.Items.Add(Keuze1(i))
        Next i
    End Sub

    Private Sub ComboBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.TextChanged
        TextBox1.Text = Mid$(ComboBox2.Text, 1, 1) & Mid$(ComboBox2.Text, 3, 1)
    End Sub
End Class

PS Als je loopjes en arrays gebruikt dan wordt je code doorgaans korter en overzichtelijker;)
 
gelukt

Wow gaaf, het is gelukt. Heel erg bedankt. Ben er erg blij mee.

Nu moet ik nog een en ander met array's gaan klussen aangezien ik er nogal een aantal moet maken. Eerst eens even zelf gaan proberen.

In ieder geval heel erg bedankt,

Wim
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan