Forums Neueste Beiträge
 

Den Focus kontrollieren

19/03/2008 - 08:52 von Alfred Malleier | Report spam
Hallo,

Frage 1: ich habe ein selbst gebasteltes Steuerelement mit 2 Textboxen
drauf. Wie kann ich ermitteln, ob das Steuerelement den Focus verliert d.h.
dass der Focus in keiner der beiden TextBoxen ist? Mein Problem ist, dass
immer erst LostFocus und dann GotFocus gefeuert wird. Ich könnte mir
vorstellen, nach LostFocus eine bestimmte Zeit auf GotFocus zu warten und
wenn es in dieser Zeit nicht gefeuert wird, dann ist der Focus weg. Doch
diese Lösung ist recht umstàndlich.

Frage 2: wie kann man verhindert, dass eine Textbox den Focus erhàlt wenn
sie auf .ReadOnly gesetzt ist? Ich habe eine provisorische Lösung indem ich
bei OnGotFocus die Textbox auf .Enabled = false setze und bei OnLostFocus
wieder auf .Enabled = true. Doch der Kursor bleibt doch im letzten Textfeld
des Steuerelementes.

Ich grüße Euch,

Alfred M.
 

Lesen sie die antworten

#1 Elmar Boye
19/03/2008 - 11:07 | Warnen spam
Hallo Alfred,

Alfred Malleier schrieb:
Frage 1: ich habe ein selbst gebasteltes Steuerelement mit 2 Textboxen
drauf. Wie kann ich ermitteln, ob das Steuerelement den Focus verliert
d.h. dass der Focus in keiner der beiden TextBoxen ist? Mein Problem
ist, dass immer erst LostFocus und dann GotFocus gefeuert wird. Ich
könnte mir vorstellen, nach LostFocus eine bestimmte Zeit auf GotFocus
zu warten und wenn es in dieser Zeit nicht gefeuert wird, dann ist der
Focus weg. Doch diese Lösung ist recht umstàndlich.




Das funktioniert kaum. Denn LostFocus tritt z. B. auch ein,
wenn der Benutzer auf ein Fenster in einer anderen Anwendung
klickt usw.
Und da von der Windows Logik erst ein Fenster deaktiviert und
erst danach ein anderes aktiviert wird, ist die Reihenfolge fest.
Und bei beiden Nachrichten handelt es sich um Benachrichtigungen,
die nur die Zustandsànderung dokumentieren, aber keinen Eingriff
zulassen.

Die Frage wàre: Wozu das ganze?
In vielen Fàllen sind zum einen die Enter und Leave Ereignisse
besser geeignet. Wenn Du ungültige Eingaben verhindern willst,
so wàre das Validating Ereignis das geeignetere.

siehe auch die Dokumenation für die Reihenfolge:
<URL:http://msdn2.microsoft.com/de-de/li...r.aspx>

Frage 2: wie kann man verhindert, dass eine Textbox den Focus erhàlt
wenn sie auf .ReadOnly gesetzt ist? Ich habe eine provisorische Lösung
indem ich bei OnGotFocus die Textbox auf .Enabled = false setze und bei
OnLostFocus wieder auf .Enabled = true. Doch der Kursor bleibt doch im
letzten Textfeld des Steuerelementes.



Auch hier etwas unkonventionell Dein Ansinnen.
ReadOnly ist dafür gedacht, daß ein Benutzer weiter auf die
Daten des Steuerelements zugreifen kann (z. B. via STRG+C),
nur sie nicht veràndern kann.
Enabled hingegen sperrt das Steuerelement insgesamt
und verhindert dabei auch, daß es den Eingabefokus
erhàlt -> und wàre somit von vornherein richtig.

Wenn es Dir um die graue Optik geht, müßtest Du eher
das Zeichnen des Steuerelements anpassen.
Oder wenn Dir das zu weit geht: Überlage die TextBox
mit einem Label daß Du je nach Sinn der Übung anzeigst.

Gruß Elmar




Ich grüße Euch,

Alfred M.

Ähnliche fragen