Forum: PC-Programmierung C# : Checkbox in Software aktualisieren


von Florian (Gast)


Lesenswert?

Hallo

Mein Problem ist denke ich recht trivial, aber trotzdem lässt es mich 
straucheln.


Ich habe eine Checkbox, bei der ein Event-Handler und eine Methode 
hinterlegt ist, die aufgerufen wird, sobald man mit der Maus die 
Checkbox drückt:
1
private void checkBox_CheckedChanged(object sender, EventArgs e)
2
{
3
    //... Code
4
}

So. Nun will ich an irgendeiner Stelle im Code die Checkbox rein 
softwaremäßig aktualisieren, also ihren Wert (checked/unchecked) 
umsetzen.

Wenn ich jedoch sowas mache wie:
1
checkBox.Checked = true;

oder
1
checkBox.CheckState = CheckState.Checked;

Dann ruft die Software anschließend sofort die oben genannte Methode 
checkBox_CheckedChanged() auf und arbeitet sie ab.
Genau das soll aber NICHT passieren.

Ich hab das schonmal hinbekommen, weis aber nichtmehr wie ich das 
angestellt habe...

Wäre um Hilfe dankbar!

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:

> Dann ruft die Software anschließend sofort die oben genannte Methode
> checkBox_CheckedChanged() auf und arbeitet sie ab.

Ist doch meistens kein Problem.
Meistens holt man in dieser Funktion doch nur den aktuell in der 
Checkbox vorhandenen Wert ab und übernimmt ihn in seine Daten oder so.

> Genau das soll aber NICHT passieren.

Warum nicht.
Das ist alles GUI Code. Wegen dem bischen Laufzeit, das merkt kein 
Mensch.

> Ich hab das schonmal hinbekommen, weis aber nichtmehr wie ich das
> angestellt habe...

Du kannst dir vor dem Setzen der Checkbox zb in einer Variablen 
vermerken, dass im CheckedChanged Handler nichts mehr passieren soll. Im 
CHeckedChanged Handler fragst du die Variable ab und entscheidest ob du 
diese Änderung weiter bearbeiten willst.

Meistens vergleicht man aber ganz einfach den tatsächlichen Zustand der 
Checkbox mit der Variablen, in der letztendlich dieser Zustand 
gespeichert werden soll. Sind beide gleich, dann macht man im 
CHeckedChanged Handler ganz einfach nichts mehr, weil die Variable ja 
sowieso mit der Checkbox übereinstimmt.

von Florian (Gast)


Lesenswert?

Über die Checkbox sende ich einen Befehl via Ethernet an ein Device. 
Wird die Checkbox nun "künstlich" vom Programm gesetzt soll aber kein 
Befehl an das Device gesendet werden (da bereits geschehen). Ansonsten 
würde der Befehl doppelt gesendet werden.

Ich habs mal irgendwie ohne Zusatzvariable hinbekommen. Aber schätze, 
dass ich wohl auf diese ausweichen muss...

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:
> Über die Checkbox sende ich einen Befehl via Ethernet an ein Device.
> Wird die Checkbox nun "künstlich" vom Programm gesetzt soll aber kein
> Befehl an das Device gesendet werden (da bereits geschehen).

Dann lass doch das senden des Befehls dort weg, wo du die Checkbox per 
Programm setzt.
Du checkst die Checkbox. Als Folge davon wird der Handler aufgerufen. 
Der Handler schickt den Befehl weg. Alles in Butter: Checkbox ist 
gesetzt und der Befehl ist rausgegangen.

von Ralf (Gast)


Lesenswert?

Auszug aus der SDK-Hilfe für .NET 3.5:

> Note:
> When the AutoCheck property is true (the default), the CheckBox is
> automatically selected or cleared when it is clicked. Otherwise, you must
> manually set the Checked property when the Click event occurs.
Für mich stellt sich das so dar, dass du es mit AutoCheck = false und 
dem Mausklick-EventHandler statt dem CheckedChanged-Handler dein 
Vorhaben erreichen könntest:
Der Mausklick-Handler invertiert den jeweiligen Zustand und schickt in 
Abhängigkeit davon den Befehl ab. Die Software kann dann munter die 
Checked-Eigenschaft bedienen, ohne dass was passiert.
Das könnte sogar gehen, ohne AutoCheck zu ändern, einfach den 
CheckedChanged-Event weglassen :)

Ralf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.