Laden...

CheckedListBox und Kontextbutton

Erstellt von rollerfreak2 vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.122 Views
rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 15 Jahren
CheckedListBox und Kontextbutton

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...

V
78 Beiträge seit 2008
vor 15 Jahren

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;

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 15 Jahren

Jo das wollte ich ja umgehen, sprich nach dem ändern der Daten abfragen. Aber so geht es auch. merci

Again what learned...

5.299 Beiträge seit 2008
vor 15 Jahren
  
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.

5.299 Beiträge seit 2008
vor 15 Jahren

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.