www.mikrocontroller.net

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


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
private void checkBox_CheckedChanged(object sender, EventArgs e)
{
    //... Code
}

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:
checkBox.Checked = true;

oder
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!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.