Benutzer mit den meisten Antworten
Problem mit der CheckedListBox

Frage
-
Hallo liebes Forum!
ich hätte eine Frage zu der "CheckedListBox".
Ist es möglich diese vorab so einzustellen, das nur ein Eintrag (Item) darin aktiv (checked) sein kann? Ich hoffe Ihr versteht, was ich meine.
Da ich diese Einstellung lieder nicht gefunden habe, habe ich es versucht im Programm umzusetzen, jedoch nur mit mäßigem Erfolg:
Dim ElmAktiv As Integer Dim i As Integer = 0 Do ElmAktiv = i i = i + 1 Loop Until CheckedListBox1.GetItemChecked(i) = True Or i = CheckedListBox1.Items.Count - 1 ElmAktiv = i While CheckedListBox1.CheckedItems.Count > 1 CheckedListBox1.SetItemChecked(ElmAktiv, False) End While
Das ist natürlich nicht die einzige Variante die ich versucht habe, jedoch die "Beste" bis jetzt :(
Ich hoffe Ihr könnt mir helfen und bedanke mich schon mal.
Grüße,
Tobias
Antworten
-
Hallo Tobias,
ein Schnellschuß über das ItemCheck Ereignis:
Private Sub CheckedListBox1_ItemCheck(sender As System.Object, e As System.Windows.Forms.ItemCheckEventArgs) _ Handles CheckedListBox1.ItemCheck Dim clb = DirectCast(sender, CheckedListBox) If e.NewValue = CheckState.Checked Then ' Via Index und rückwärts, da Auflistung verändert wird Dim index = clb.CheckedIndices.Count - 1 While index >= 0 ' Andere als den neu gewählte Index abwählen If clb.CheckedIndices(index) <> e.Index Then clb.SetItemCheckState(clb.CheckedIndices(index), CheckState.Unchecked) End If index = index - 1 End While End If End Sub
Gruß Elmar
- Als Antwort markiert AtriuMiller Montag, 15. April 2013 14:18
-
Hallo Tobias,
warum sollte das nicht gehen?
Dim RadioItems As New List( Of String ) Dim Counter As Int32 = 0 RadioItems.Add( "Abc" ) RadioItems.Add( "Def" ) RadioItems.Add( "Xyz" ) For Each RadioItem As String In RadioItems Dim RadioButton As New RadioButton() RadioButton.Text = RadioItem RadioButton.Tag = RadioItem RadioButton.Top = Counter * 20 GroupBox1.Controls.Add( RadioButton ) Counter += 1 Next
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert AtriuMiller Montag, 15. April 2013 13:28
Alle Antworten
-
Hi,
wenn Du RadioButtons willst, warum nimmst Du die dann nicht?
http://msdn.microsoft.com/de-de/library/sefz7fxc.aspx
CheckboxList ist eben dafür gedacht, mehrere Elemente selektieren zu können. RadioButtons dienen dazu, nur ein Element selektieren zu können.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Tobias,
ein Schnellschuß über das ItemCheck Ereignis:
Private Sub CheckedListBox1_ItemCheck(sender As System.Object, e As System.Windows.Forms.ItemCheckEventArgs) _ Handles CheckedListBox1.ItemCheck Dim clb = DirectCast(sender, CheckedListBox) If e.NewValue = CheckState.Checked Then ' Via Index und rückwärts, da Auflistung verändert wird Dim index = clb.CheckedIndices.Count - 1 While index >= 0 ' Andere als den neu gewählte Index abwählen If clb.CheckedIndices(index) <> e.Index Then clb.SetItemCheckState(clb.CheckedIndices(index), CheckState.Unchecked) End If index = index - 1 End While End If End Sub
Gruß Elmar
- Als Antwort markiert AtriuMiller Montag, 15. April 2013 14:18
-
Hallo Tobias,
sollten Dir die Antworten von Stefan Falz und/oder Elmar Boye geholfen haben, markiere sie bitte als Antwort.
Grüße,
Stefan Kleinewillinghoefer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwicklern“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden koennen.
-
Hallo,
danke erst mal für die Antworten ich werde beides sicherlich noch heute prüfen.
RadioButtons habe ich auch schon in Betracht gezogen, doch man kann da ja leider keine Liste mit noch unbekannter Anzahl an Einträgen erzeugen lassen!? Oder? Wenn ja, dann währe das die perfekte Lösung. (Immerhin kennt man das ja, dass wenn das Auswahlelement rund ist, geht nur eine Auswahl; wenn das Auswahlelement eckig ist, gehen mehrere Optionen...)
Danke soweit und beste Grüße,
Tobias
-
Hallo Tobias,
warum sollte das nicht gehen?
Dim RadioItems As New List( Of String ) Dim Counter As Int32 = 0 RadioItems.Add( "Abc" ) RadioItems.Add( "Def" ) RadioItems.Add( "Xyz" ) For Each RadioItem As String In RadioItems Dim RadioButton As New RadioButton() RadioButton.Text = RadioItem RadioButton.Tag = RadioItem RadioButton.Top = Counter * 20 GroupBox1.Controls.Add( RadioButton ) Counter += 1 Next
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert AtriuMiller Montag, 15. April 2013 13:28
-
Hallo Stefan,
Danke für die Antwort! Das ist auf jeden Fall der Ansatz, den ich gesucht habe!
Werde das so bei mir unterbringen.
Grüße,
Tobias
- Bearbeitet AtriuMiller Montag, 15. April 2013 13:28
-
Hallo,
eine Sache wäre da noch. Ich hatte mich anfänglich für eine CheckedListBox entschieden, da hier eine Scrollbar angezeigt wird, sobald mehr Elemente enthalten sind als dargestellt werden.
Wenn ich nun die Variante mit den RadioButtons verwende, wird keine Scrollbar angezeigt. Diese wird weder bei der GroupBox, ListBox, Panel oder CheckedListBox angezeigt.
Habe ich etwas übersehen? Gibt es eine Möglichkeit hier eine Scrollbar anzeigen zu lassen.
Grüße,
Tobias
-
Hallo Tobias,
nimm anstelle der GroupBox ein Panel Control, setze dessen AutoScroll Eigenschaft auf True, füg die RadioButtons dort ein und Voilà ... :)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Montag, 15. April 2013 15:36
-
Hallo Tobias,
es war wie gesagt ein Schnellschuss...
Wenn man RadioButtons verwenden will, die logischer wären; wird es in der Summe aufwändiger. Wenn man ein Panel verwendet, kommt das eine oder andere zur Verwaltung hinzu.
Als eine Alternative schau Dir mal an:
http://www.codeproject.com/Articles/18526/RadioListBox-A-ListBox-with-Radio-Buttons-WinformsGruß Elmar
-
Hallo Elmar,
nur aus Interesse: Was müsste man denn zusätzlich verwalten, wenn man ein Panel nimmt?
Die Gruppierung funktioniert ja auch so (also dass innerhalb der RadioButtons in einem Panel die Auswahl immer nur auf einen RadioButton funktioniert und automatisch umgeschaltet wird).
Den selektierten Wert muss man sich ja so oder so speichern, wenn die Auswahl geändert wird (oder man ermittelt den dann jeweils dort, wo man ihn benötigt).
Sonst fällt mir da grad nix ein.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
das hängt ein bisschen von Ansprüchen ab.
Wenn sollte ein Steuerelement wiederverwendbar sein. Eine Items Auflistung sollte alle Male da sein, zusammen mit Ereignissen usw.
Und eine Unterstützung Datenbindung wäre ganz nett.
Summa Summarum geschätzt ein paar Stündchen... vs 5 Minuten oben.
Gruß Elmar
- Bearbeitet Elmar Boye Montag, 15. April 2013 16:43
-
Hallo Elmar,
ach so. Klar, das ist natürlich 100%ig richtig. Soweit hab ich da nur grad nicht gedacht :) Danke für die Erleuchtung.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community