592 Aufrufe
Gefragt in Anwendungen(Java,C++...) von
Hallo Zusammen! Mich würde mal folgendes interessieren: ich habe
eine checkListBox, in diese werden über eine Schleife verschiedene
Einträge geschrieben, was auch funktioniert. wie kann ich jetzt
erreichen, wenn ich z.Bsp. bei einem Eintrag das Häkchen setze, dass
dann eine neue Form geöffnet wird und wenn ich den Haken wieder
entferne, diese neue Form geschlossen wird. Es soll nur jeweils ein
Element in dieser checkedListBox ausgewählt werden können, also
kein MultiSelect. Und das Ganze sollte unter C# funktionieren.
Danke schon mal für hilfreiche Vorschläge / Rückmeldungen!
LG Sabine

5 Antworten

0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo Sabine,

ich würde die Form zunächst einmal erzeugen, ihre Eigenschaft Visible aber auf false setzen.
Danach prüfen, ob das Häkchen in der checkListBox gesetzt ist und in dem Fall die Form in den Fordergrund brinden (.BringToFront) und sichtbar machen (.Visible=true)

Ist das Häkchen nicht gesetzt, setzt du die Eigenschaft Visible dieser Form wieder auf false und schon ist sie verschwunden.

Gruß
computerschrat
0 Punkte
Beantwortet von
Hallo und danke für die schnelle Antwort. Im Grunde hatte ich mir das
auch so vorgestellt. Mein Problem: ich weiß nicht, wie ich die einzelnen
Einträge abfragen soll.
Bei einer ListBox z.Bsp. kann ich abfragen:
if(ListBoxXX.checked == true)
dann mach das.....
else
dann tu dies
Diese Möglichkeit finde ich bei der checkedListBox einfach nicht.
Ich habe auch noch nie mit einer checkedListBox gearbeitet, ist eben
alles irgendwann das erste Mal :-)
0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo Sabine,

hier ist mal ein Codebeispiel, das die Elemente einer checkedListBox durchgeht:
private void WhatIsChecked_Click(object sender, System.EventArgs e) {
// Display in a message box all the items that are checked.

// First show the index and check state of all selected items.
foreach(int indexChecked in checkedListBox1.CheckedIndices) {
// The indexChecked variable contains the index of the item.
MessageBox.Show("Index#: " + indexChecked.ToString() + ", is checked. Checked state is:" +
checkedListBox1.GetItemCheckState(indexChecked).ToString() + ".");
}

// Next show the object title and check state for each item selected.
foreach(object itemChecked in checkedListBox1.CheckedItems) {

// Use the IndexOf method to get the index of an item.
MessageBox.Show("Item with title: \"" + itemChecked.ToString() +
"\", is checked. Checked state is: " +
checkedListBox1.GetItemCheckState(checkedListBox1.Items.IndexOf(itemChecked)).ToString() + ".");
}

}


Ich denke, das hilft etwas weiter.
Die Quelle dieses Beispiels findest du hier:
https://msdn.microsoft.com/de-de/library/system.windows.forms.checkedlistbox.items(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

Gruß
computerschrat
0 Punkte
Beantwortet von
Hallo computerschrat,
danke für Deine Mühe. Ich hab's mir mal angesehen, allerdings löst es mein Problem nicht wirklich. Das Auslesen,
welcher Eintrag ist eigentlich nicht interessant. Wichtiger wäre es, mal ein Beispiel zu haben, wo etwas ausgelöst wird,
wenn ein Eintrag mit Häkchen belegt wird bzw. dieser wieder entfernt wird.
Per Code kann ich zwar setzen, dass Index 2 mit bool = true belegt, aber dann erscheint das beim Ausführen auch so.
In meiner checkListBox sollen insgesamt 24 Einträge eingelesen werden, alle nicht markiert und alle ohne Häkchen.
Und wenn ich jetzt der Meinung, ich brauche Infos zu Eintrag 18, dann klicke ich darauf, das Häkchen wird gesetzt und es
wird diese zweite Form angezeit, in welcher dann zusätzliche Infos zum gewählten Eintrag stehen. Und wenn ich das
Häkchen wieder entferne, verschwindet die Form und der Eintrag ist auch nicht mehr markiert - ich könnte das Spielchen
also mit dem nächsten Eintrag wiederholen. Und genau dazu suche ich Infos, wie man so etwas (nicht all zu aufwendig)
programmiert. Ich hab bisher leider noch nichts gefunden, deshalb habe ich eben mal hier versucht.
Also, falls Du noch Ideen hast, lass sie mich bitte wissen, ansonsten vielen lieben Dank für Deine Mühe.
LG Sabine
0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo Sabine,

ich habe den code mal auf die wesentlichen drei Zeilen zusammengestrichen:

private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (int indexChecked in checkedListBox1.CheckedIndices)
{
indexChecked ist hier der Index des gerade betrachteten selektierten Items
}
}
}


Zum anlegen der Funtion klickst du einfach doppelt auf die checkedListBox im Entwurfsfenster. Immer, wenn sich im Programmablauf der Auswahlzustand in der checkedListBox ändert, wird die Funktion angesprungen. Die foreach-Schleife wird nun für jedes selektierte Element in der ListBox durchlaufen und indexChecked liefert den Index des selektierten Elements. Du kannst damit also eine Liste aller jetzt aktivierten Items anlegen.
Diese Liste vergleichst du mit der bei der letzten Zustandsänderung angelegten Liste. Damit siehst du, welches Item sich geändert hat und aus der aktuellen Liste siehst du den aktuellen Zustand dieses Items.

Gruß
computerschrat
...