Ich habe eine CheckedListBox in der sich items befinden. Dazu ein Button der nur aktiv sein soll wenn 1 oder mehr checkboxen true sind. Also habe ich folgenden Code geschrieben.
void cbl_cpus_ItemCheck(object sender, ItemCheckEventArgs e)
{
this.btn_receive.Enabled = (cbl_cpus.CheckedItems.Count != 0);
}
Problem an der Sache ist, wenn ich noch keine CB angeklickt habe, und ich das erste mal in dieser methode lande, dann ist die CheckedItems noch nicht auf den neusten stand. Sodass erst beim checken der 2ten CB der Button aktiv wird, bzw. sogar wenn man selbigen wieder auschecked weil die CheckedItems "hinter hengt".
Jetzt wird ich gern wissen ob man sich an ein Datenbasierendes Event hängen kann, das nur kommt wenn sich daten ändern, und auch nur wenn sich sich geändert haben und nicht wenn sie geändert werden.
Hab leider kein Event gefunden, weis einer Rat?
Again what learned...
Die Beschreibung des Events "ItemCheck" lautet wie folgt:
Zeigt an, dass der Aktivierungszustand eines Elements demnächst geändert wird. Der Wert wird erst nach dem Eintritt des Ereignisses aktualisiert.
Per EventArgs Parameter (Standart e) kannst du den neuen Wert das ausgewaehlten Elements abfragen. ( e.NewValue )
Hier ist noch ein Beispiel wie man die Abfrage dann machen kann:
if (e.NewValue == CheckState.Unchecked && checkedListBox1.CheckedIndices.Count == 1)
this.button1.Enabled = false;
else if (e.NewValue == CheckState.Checked || checkedListBox1.CheckedIndices.Count > 0)
this.button1.Enabled = true;
else
this.button1.Enabled = false;
Jo das wollte ich ja umgehen, sprich nach dem ändern der Daten abfragen. Aber so geht es auch. merci
Again what learned...
if (e.NewValue == CheckState.Unchecked && checkedListBox1.CheckedIndices.Count == 1) this.button1.Enabled = false; else if (e.NewValue == CheckState.Checked || checkedListBox1.CheckedIndices.Count > 0) this.button1.Enabled = true; else this.button1.Enabled = false;
kleine Verschönerung:
if (e.NewValue == CheckState.Unchecked && checkedListBox1.CheckedIndices.Count == 1)
this.button1.Enabled = false;
else
this.button1.Enabled = e.NewValue == CheckState.Checked || checkedListBox1.CheckedIndices.Count > 0;
(Ob die Logik stimmt habich nichmal überprüft)
Der frühe Apfel fängt den Wurm.
Ich glaub, richtig wär:
this.button1.Enabled = e.NewValue == CheckState.Checked || checkedListBox1.CheckedIndices.Count > 1;
, sonst nix.
is aber ungetestet
Der frühe Apfel fängt den Wurm.