Hallo Leute,
Ich habe eine wx-Anwendung, in der die Gültigkeit von Eingaben in Feldern beim Kill-Focus validiert wird und bei einem Fehler dieses Feld wieder den Fokus erhält. Damit kann der User nicht "aus diesem Feld heraus", wenn es nicht korrekt ausgefüllt ist. Problem: Auch beim Klick auf den Abbrechen-Knopf sagt die Kill-Focus-Methode "halt, da is noch'n Fehler" und das Abbrechen geht erst dann, wenn das Feld korrekt ausgefüllt ist. Das ist nun nicht im Sinne des Abbrechen-Knopfs. Ich habe mit event.GetWindow() versucht, das Ziel-Window des Events zu bestimmen, liefert aber immer None :K .
Ich möchte also irgendwie erreichen, dass die Validierung der Feldinhalte unterbunden wird, wenn ich den Abbrechen-Knopf klicke. Kann jemand helfen?
Ich arbeite mit Win7 SP1, Python 2.7.4, wxPython 2.8.12.1
Beste Grüße
Humbalan
"Abbrechen"-Knopf soll andere kill-focus-Methoden unterbinde
-
- User
- Beiträge: 80
- Registriert: Dienstag 14. November 2006, 10:40
Hallo Humbalan,
hast du ein lauffähiges Minimalbeispiel?
Wenn ich richtig vermute, schreibst du den Handler für das Event zu wx.EVT_KILL_FOCUS selbst. Und dieser wird vor dem Event des Abbrechen-Knopfs durchgeführt? Also erst wird das KILL-Event verarbeitet und dann das Abbrechen-Event. Im Kill-Event-Handler passiert wahrscheinlich deine Feldvalidierung, die dafür sorgt, dass du nicht aus dem Feld kommst, auch wenn du "Abbrechen" drückst. Wenn meine Annahmen stimmen, dann müsstest du in deiner Kill-Event-Methode unterscheiden, wer den Event ausgelöst hat? Vielleicht reicht es schon mittels wx.Window_FindFocus() herauszufinden, welches Widget den Fokus aktuell hat, also welches gerade ausgewählt ist. Sinngemäß müsstest du mit wx.Window_FindFocus() auf den "Abbrechen-Button" in deiner Kill-Event-Methode prüfen und deine Validierung zum Kill-Event nur durchführen lassen, wenn der Fokus nicht auf dem Abbrechen-Knopf liegt.
Vielleicht hilft das ja?
Viele Grüße
Piet Lotus
P.S. Ob das Vorgehen zu deiner Systemkonfigration passt. weiß ich jetzt allerdings nicht.
hast du ein lauffähiges Minimalbeispiel?
Wenn ich richtig vermute, schreibst du den Handler für das Event zu wx.EVT_KILL_FOCUS selbst. Und dieser wird vor dem Event des Abbrechen-Knopfs durchgeführt? Also erst wird das KILL-Event verarbeitet und dann das Abbrechen-Event. Im Kill-Event-Handler passiert wahrscheinlich deine Feldvalidierung, die dafür sorgt, dass du nicht aus dem Feld kommst, auch wenn du "Abbrechen" drückst. Wenn meine Annahmen stimmen, dann müsstest du in deiner Kill-Event-Methode unterscheiden, wer den Event ausgelöst hat? Vielleicht reicht es schon mittels wx.Window_FindFocus() herauszufinden, welches Widget den Fokus aktuell hat, also welches gerade ausgewählt ist. Sinngemäß müsstest du mit wx.Window_FindFocus() auf den "Abbrechen-Button" in deiner Kill-Event-Methode prüfen und deine Validierung zum Kill-Event nur durchführen lassen, wenn der Fokus nicht auf dem Abbrechen-Knopf liegt.
Vielleicht hilft das ja?
Viele Grüße
Piet Lotus
P.S. Ob das Vorgehen zu deiner Systemkonfigration passt. weiß ich jetzt allerdings nicht.
Guten Morgen Piet Lotus,
danke für die Antwort.
Deine Annahmen über die Situation sind alle richtig. Die vorgeschlagene FindFocus()-Lösung hat ins Schwarze getroffen. Herzlichen Dank für die Hilfe.
Beste Grüße
Humbalan
danke für die Antwort.
Deine Annahmen über die Situation sind alle richtig. Die vorgeschlagene FindFocus()-Lösung hat ins Schwarze getroffen. Herzlichen Dank für die Hilfe.
Beste Grüße
Humbalan