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
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.
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.
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
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).
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
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
Ah - bin ich doch nicht der erste, der das Problemchen hat :-) Werde ich gleich mal probieren.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.