mehrere Comboboxen in Abhängigkeit
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von nemesis.
-
-
- Das heißt, dass die Anzahl der Comboboxen immer unterschiedlich sein können?
- Wie sieht zB so ein Pool aus Buchstaben aus?
lgScheduleLib 0.0.1.0
Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten -
Also, konkret geht es darum, ein Programm zu schreiben, das mir Netzlaufwerke, die Verbunden sind in einer Textbox ausgibt und in der Zugehörigen Combobox den Laufwerksbuchstaben. Wenn man nun den Laufwerksbuchstaben ändern möchte, sollten nur noch freie zur Auswahl stehen (kann ja keine 2 C-Laufwerke, z.B., geben).
-
Einfach Laufwerke ermitteln und diese Laufwerke aus dem Pool ausschließen
vbarchiv.net/tipps/tipp_18-all…-laufwerke-ermitteln.html -
jeder Combobox muss man halt eine spezifische DataSource übergeben, die zu bilden ist aus "ABCDEFGHIJKLMNOPQRSTUVWXYZ", abzüglich der in den anneren Combos aktuell eingestellten Chars.
Die DataSources müssen immer neu berechnet wern, wenn ein Laufwerksbuchstabe geännert wird.
Ups - Dodo schneller.
Aber ich habe ein klein Detail anners: es werden nicht alle Laufwerksbuchstaben quasi subtrahiert, sondern der eigene Laufwerksbuchstabe bleibt natürlich drinne.
Und den Pool nicht zu kompliziert denken. Obiger String ist schon tauglich als Pool. Und der sollte auch unangetastet bleiben - die Combos sollten eben wirklich jede eine eigens zu bildende List(Of Char) übergeben kriegen.
Och - ich sag noch weiter vor:
Ah - es gibt auch eine ganz schnuckelige Linq-Extension zum Thema. Wie findet ihr:
Sowas könnteman verwenden, und müsste nurnoch den an Except zu übergebenden String bilden.Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
hm, ok, also könnte das so aussehen?
VB.NET-Quellcode
- DIM VORHANDEN_LISTE AS STRING
- For Each myControl As Control In Controls
- If TypeOf myControl Is ComboBox Then
- VORHANDEN_LISTE=VORHANDEN_LISTE & myControl.Text
- End If
- Next
- DIM alphabetOhneVokale = ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".Except(VORHANDEN_LISTE)).ToList
- For Each myControl As ComboBox In Controls
- If TypeOf myControl Is ComboBox Then
- myControl.Items.AddRange(alphabetOhneVokale)
- End If
- Next
-
-
-
-
ups, sorry, das war mein Fehler.
Aber auch bei Datasource bringt er mir folgenden Fehler:
Property access must assign to the property or use its value.
-
Jo, vlt. einfach mal die grundlegendste Syntax von VB lernen
Ist .DataSource eine Property oder eine Methode?Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
AHHHHH! Autsch! ... Ok, danke!
Edit:
... hm ... die Aktion soll ja immer ausgeführt werden, wenn sich eine Combobox ändert ... also habe ich eine Prozedur mit Handles CB1.TextChange dgemacht. Aber das Event tritt nicht auf, wenn ich in der Combobox einen anderen Wert auswähle. Ich habe noch ein paar andere Eigenschaften durchprobiert, aber das hat auch nicht funktioniert. Das Event sollte nur auftreten, wenn etwas manuell in den boxen gewählt wird, nicht wenn die Listen aktualisiert werden, sonst rennt er sich ja tot. Wa verwendet man hier?Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „nemesis“ ()
-
-
hm, der rennt sich da irgendwo tot:
VB.NET-Quellcode
- Private Sub Index_changed(sender As Control, e As System.EventArgs) Handles CB21.SelectedIndexChanged, CB2.SelectedIndexChanged, CB3.SelectedIndexChanged, CB4.SelectedIndexChanged, CB5.SelectedIndexChanged, CB6.SelectedIndexChanged, CB7.SelectedIndexChanged, CB8.SelectedIndexChanged, CB9.SelectedIndexChanged, CB10.SelectedIndexChanged, CB11.SelectedIndexChanged, CB12.SelectedIndexChanged, CB13.SelectedIndexChanged, CB14.SelectedIndexChanged, CB15.SelectedIndexChanged, CB16.SelectedIndexChanged, CB17.SelectedIndexChanged, CB18.SelectedIndexChanged, CB19.SelectedIndexChanged, CB20.SelectedIndexChanged, CB21.SelectedIndexChanged
- check_Comboboxes(sender.Name)
- End Sub
- Private Sub check_Comboboxes(ByVal Combobox As String)
- Dim countComboboxes As Integer = 0
- Dim Except As String = ""
- For Each myControl In Controls
- If TypeOf myControl Is ComboBox Then
- Except = Except & myControl.Text
- End If
- Next
- Dim Laufwerke = ("EFGHIJKLMNOPQRSTUVWXYZ".Except(Except)).ToList
- For Each myControl In Controls
- If TypeOf myControl Is ComboBox Then
- Dim myCobobox As ComboBox
- myCobobox = myControl
- If myCobobox.Name <> Combobox Then
- Dim current As String = myCobobox.Text
- myControl.DataSource = Laufwerke
- myCobobox.Text = current
- End If
- End If
- Next
- End Sub
habe ich hier einen Denkfehler drin? -
-
-
-
-
Das sagtest du bereits.
Aber ühaupt mal: Welche "Schleife" meinst du? Die von dir geposteten Schleifen scheinen doch in ieiner Weise erforderlich (sonst mach sie halt weg).
Falls du statt Schleife "Ereigniskette" meinst, dann würde ich den Begriff auch verwenden - nicht, dass wir hier tagelang aneinander vorbei-reden.
Also wie ist im Tut die Ereigniskette vermieden - und welche Ereignisketten-Gefahr bestand ühaupt? -
Also, wenn der Index einer Combobox sich ändert, werden alle Comboboxen so angepasst, dass der bereits ausgewählte Index in den anderen Comboboen nichtmehr zur Verfügung steht ... und das birgt wohl eine Schleife ... denn er Ändert dann dauernd und wird nichtmehr fertig.
Ich hoffe ich konnts einigermaßen erklären
VB.NET-Quellcode
- Private Sub check_Comboboxes(ByVal Combobox As String)
- Dim countComboboxes As Integer = 0
- Dim Except As String = ""
- For Each myControl In Controls
- If TypeOf myControl Is ComboBox Then
- Except = Except & myControl.Text
- End If
- Next
- Dim Laufwerke = ("EFGHIJKLMNOPQRSTUVWXYZ".Except(Except)).ToList
- For Each myControl In Controls
- If TypeOf myControl Is ComboBox Then
- Dim myCobobox As ComboBox
- myCobobox = myControl
- If myCobobox.Name <> Combobox Then
- Dim current As String = myCobobox.Text
- myControl.DataSource = Laufwerke
- myCobobox.Text = current
- End If
- End If
- Next
- End Sub
diese Prozedur wird aufgerufen, wenn sich eine Combobox ändern (SelectedIndexChanged)Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nemesis“ ()
-
Benutzer online 1
1 Besucher
-
Ähnliche Themen
-
4 Benutzer haben hier geschrieben
- nemesis (10)
- ErfinderDesRades (8)
- fichz (1)
- Gast (1)