Kann man ein Event im Command deaktivieren

fujitsufan

Erfahrenes Mitglied
Hallo zusammen,

ich stoße immer wieder auf das selbe Problem, wenn ich softwarmaßig auf ein Steuerelement (Editbox) einen Wert schreibe.
Code:
SetDlgItemText(hDlg,Id,text);
Dieses Schreiben auf ein Steuerelement löst ein Event mit dem NotifyCode == CBN_SELCHANGE aus.
Code:
::Command(WORD Id, WORD NotifyCode)
Dieses Event ist von dem Event welches bei manueller Eingabe in das Steuerelement durch den Benutzer nicht unterscheidbar ist.

Ist es möglich, dieses Event während des Schreibens (softwarmäßig) auf das Steuerelement zu deaktivieren und danach wieder zu aktivieren, damit hierbei kein Event ausgelöst wird?


Mit freundlichen Grüßen

fujitsufan
 
Hallo zusammen,

ich habe noch einen Nachschlag.

Den Event Handler deaktivieren kenne ich von c# in der Form:

hinzufügen:
Code:
button1->Click += gcnew System::EventHandler(this, &Form1::click_Event1);
entfernen:
Code:
button1->Click -= gcnew System::EventHandler(this, &Form1::click_Event1);

MfG.
fujitsufan
 
Nutzt du MFC?
Außerdem: im einfachsten Fall setzt du einfach eine ((datei-)globale) Variable auf true oder false und prüfst beim case CBN_SELCHANGE einfach den Status der Variablen und reagierst entsprechend. Oder spricht etwas dagegen, wen ja, was?

vg
kickerxy
 
Alternativ könntest du statt SetDlgItemText() auch manuell PostMessage aufrufen:
C++:
PostMessage(
  [Hwnd von deiner Editbox],
  WM_SETTEXT,
  [wParam],
  ["A pointer to a null-terminated string that is the window text"]
);
Da wParam von WM_SETTEXT laut Dokumentation nicht genutzt wird, könntest du in diesem Parameter ein Flag passen, welches angibt, dass das Event von deinem Code erzeugt worden ist.
 
Hallo kickerxy,
das hatte ich fast vermutet.:rolleyes:
Ich haben das Problem mit einer globalen Variablen bewältigt.
Vielen Dank!

MfG.
fujitsufan
 
Hallo fujitsufan

Ich kenne dein Setup nicht, gehe aber davon aus, dass du mit Klassen und ähnlichem arbeitest. Ich gehe zudem davon aus, dass dein Editcontrol in eine Klasse gekapselt ist. Entsprechend rate ich dir nicht eine globale Variable zu verwenden sondern eine Klassenvariable. Globale Variabeln können (wie eigentlich immer) schnell zu Problemen führen.

Grüsse
Cromon
 

Neue Beiträge

Zurück