SendMessage-WM_SETTEXT zu TextBox wird nicht ausgelöst TextChanged-Event
Habe ich code, erhält das handle für ein textbox-Steuerelement und verwendet die windows-API, um den text zu ändern.
Das TextChanged-Ereignis nicht ausgelöst, wenn der text aktualisiert wird.
Gibt es einen Weg, um das Feuer der TextBox.TextChanged-Ereignis verwenden der Windows-API?
[Update]
Ich glaube, der Grund, das Ereignis nicht ausgelöst wird, weil die textbox-handle gesendet wird, wenn eine DCOM-Schnittstelle.
Das Programm ist eine National Instruments-TestStand-shell in c# geschrieben und verwendet die NI-TestStand-COM-Objekt für die core-Funktionalität. In der TS-Sequenz-Datei (eine Art TS-Skript-Sprache) erstellte ich eine Objekt-Referenz für das textbox-handle, und legen Sie es mit den TS-api in der shell-form load-Ereignis. Danach schicke ich den Griff um meine c# - DLL. Ich SendMessage verwenden, aktualisieren Sie die textbox und das funktioniert gut. Das problem ist, dass das TextChanged-Ereignis nicht ausgelöst.
Versuchte ich mit der TS-Schnittstelle zum senden der textbox und das TextChanged-Delegierter und ich konnte es nicht zu funktionieren. Ich denke, es ist eine AppDomain Problem zu tun, dass durch die TS COM-Objekt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie dieses Programm beweist, die
TextChanged
- Ereignis wird ausgelöst, wenn das Steuerelement gesendet wird, eineWM_SETTEXT
Nachricht.Beachten Sie, dass diese erste version der Antwort war zu Komplex und verwendet eine
SendMessage
wie diese:und damit hatte manuelle marshalling:
Kommentare zu dieser Frage (Automatische casting für string DllImport Argumente vs Marschall.StringToCoTaskMemUni) überredete mich, zu aktualisieren.
Marshal.StringToHGlobalUni
?HeapAlloc
. Und es gibt auchVirtualAlloc
. Haufen aboud!Ich bin mir nicht sicher, was text, den Sie versuchen zu ändern, aber ich verwendet eine Kombination von PostMessages und drücken von Tasten (für zahlen) in das Textfeld ein und löst die TextChangedEvent.
Blick auf Methode 2 von diese. Es ist im Grunde setzt Sie die Maus, um klicken Sie auf das Textfeld und dann die senden-Taste drückt, der text, den Sie möchten, um das Textfeld (Brief).