Forum: PC-Programmierung ValueChanged-Ereignis verhindern


von H.Joachim S. (crazyhorse)


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
von E-Mail (wird nicht angezeigt): (Gast)


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.

von H.Joachim S. (crazyhorse)


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.

von Georg (Gast)


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

von H.Joachim S. (crazyhorse)


Lesenswert?

Genau das habe ich befürchtet :-(

von Reinhard Rebentrost (Gast)


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

von H.Joachim S. (crazyhorse)


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

von Reinhard Rebentrost (Gast)


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

von H.Joachim S. (crazyhorse)


Lesenswert?

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

von H.Joachim S. (crazyhorse)


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.

von AndyII (Gast)


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

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.