mikrocontroller.net

Forum: PC-Programmierung ValueChanged-Ereignis verhindern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kann man verhindern, dass wenn ich per Software (z.B. ein 
NumericUpDown) einen neuen Wert schreibe, das ValueChanged-Ereignis 
ausgelöst wird?
Also wenn es per Tastatur/Maus gemacht wird ja, vom Programm aus nein.

Hintergrund ist eine kleine Software, die sowohl ein Gerät bedienen kann 
als auch als Monitor verwendet werden soll. Gerät hat 2 Schnittstellen 
(PC, WLAN)

Schreibt nun das WLAN-Modem, bekomme ich die Quittung, schreibe das ins 
Steuerelement zur Anzeige und löse damit nun natürlich einen erneuten 
Sendevorgang aus - das soll unterbleiben.

: Bearbeitet durch User
Autor: E-Mail (wird nicht angezeigt): (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Programmierumgebung ist mir unklar, aber generell Du koenntest das 
Element locken (readonly machen), dann deinen Wert hineinschreiben und 
wieder entlocken. Dein Programm kann sich dann sicher sein, dass das 
Event nicht von einer echten Benutzereingabe kommt. Beachte aber 
moegliche Fokus-Implikationen.

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
VB/VisualStudio.

ReadOnly hilft nichts, verhindert nur die direkte Zahleneingabe.
Wenn ich schreibe:

Private Sub
NumericUpDown1.ReadOnly = True
NumericUpDown1.Value=1000
End Sub

wird trotzdem das ValueChanged-Ereignis ausgelöst.

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
H.Joachim S. schrieb:
> wird trotzdem das ValueChanged-Ereignis ausgelöst

Wenn du das nicht selbst geschrieben hast kannst du daran auch nichts 
ändern. Du kannst höchstens feststellen wodurch der Interrupt ausgelöst 
wurde und danach entscheiden ob das Ereignis bearbeitet wird. Z.B. setzt 
du beim Schreiben ein Flag und wertest das in der Service-Routine aus.

Georg

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das habe ich befürchtet :-(

Autor: Reinhard Rebentrost (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
So ganz verstehe ich noch nicht, ob es sich nun um dein eigenes Programm 
handelt (wie ja
>NumericUpDown1.ReadOnly = True
>NumericUpDown1.Value=1000

suggeriert) oder ob du mit deinem Programm ein anderes steuern willst. 
Wenn du den Code oben schreiben kannst, hast du doch auch Zugriff auf 
den Handler und kannst dort ein Flag auswerten? Oder du könntest den 
Handler per RemoveHandler und  AddHandler aus- und wieder einhängen (ist 
zwar weniger elegant, aber falls nichts wirklich parallel läuft, dürfte 
es auch sicher sein).

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ist alles eigene Software.

Natürlich kann ich da ein flag auswerten, aber es sind knapp 100 handler 
die ich dafür anpacken muss.
Einfacher und schöner wäre es gewesen:
-Auschalten
-Wert rein
-einschalten

Autor: Reinhard Rebentrost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, ok. Man kann den Text auch ohne Auslösen von ValueChanged ändern (in 
VB dann natürlich, das ist C#):

https://stackoverflow.com/questions/39063642/update-value-of-the-numericupdown-control-without-raising-of-valuechanged-event

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah - bin ich doch nicht der erste, der das Problemchen hat :-)
Werde ich gleich mal probieren.

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Add/Removehandler funktioniert perfekt, Dankeschön. Das ist im Prinzip 
genau das was ich gesucht habe.
Spart mir die handler anzufassen und vermeidet eine Unmenge globaler 
Variablen, ich hätte für jeden ein eigenes flag gebraucht.

Autor: AndyII (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann bastel dir doch einfach eine neue combo Box mit dem flag drin das 
von einer normalen combo Box erbt... Dann hast du das ganze 
übersichtlich, schreibst den Code nur ein Mal und kannst es mit einem 
einfach flag lösen bzw musst nicht ständig sie event Händler anfassen

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.

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