Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Focus auf verschiedene Edit Felder legen
Stread - Mi 02.09.09 20:30
Titel: Focus auf verschiedene Edit Felder legen
Ich habe 3 Edit Felder. Der Focus ist am Anfang bei Edit1. Wenn ich einen Button drücke soll der Focus auf Edit2 gehen. Das habe ich schon.
Delphi-Quelltext
1: 2: 3: 4:
| procedure THauptfenster.Button1Click(Sender: TObject); begin Edit2.SetFocus; end; |
Wenn ich nun nocheinmal auf den gleichen Button drücke soll der Focus auf Edit3 liegen. Mit if-Abfrage funktioniert es nicht. Wie dann?
Danke
Stread
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 02.09.2009 um 23:19
jakobwenzel - Mi 02.09.09 20:35
Dann machst du bei der if-Abfrage wohl was falsch, denn damit wirst dus machen müssen.
Xentar - Mi 02.09.09 20:56
Mal abgesehen davon, dass ich grad keinen Sinn hinter dem Vorhaben sehe (ich persönlich wechsel den Focus mit der Tab-Taste, oder wenns sein muss mit der Maus), musst du dir auch merken, ob / wie oft der Button schon geklickt wurde. Dann klappts auch mit der If-Abfrage.
gfehmke - Do 03.09.09 10:48
Hi
Per Abfrage von Focused feststellen, welches Edit den Focus hat und entsprechend reagieren??
Delphi-Quelltext
1:
| if Edit1.Focused then . . . . . |
G.
Nersgatt - Do 03.09.09 11:22
Du wirst Dir merken müssen, wo der Focus ist und entsprechend weiterschalten. Das Problem ist, dass der Button ja beim Klick automatisch auch den Focus erhält. Sonnst könnte man einfach mit
Delphi-Quelltext
1:
| PostMessage(Handle, WM_NEXTDLGCTL, 0, 0); |
den Focus weitersetzen.
Lannes - Do 03.09.09 17:34
Hallo,
ich verstehe den Sinn auch nicht so richtig.
Hier mal ein Ansatz, man braucht keine Klicks zu zählen, sich nicht merken welches Edit zuletzt den Focus hatte und keinen Code für den Button zur Auswertung/Weiterverwendung der Daten aus den Editfeldern. Eine Verarbeitung der Daten aus den Editfeldern erfolgt auch wenn eines der Editfelder auf anderem Wege(Tab-Taste etc.) verlassen wird.
Die Editfelder bekommen im OI in der Eigenschaft Edit.Tag die gewünschte Reihenfolge zugewiesen.
Der gesamte Code in einem OnExit-Event-Handler der allen Edits zugewiesen wird:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.AllEditExit(Sender: TObject); begin Caption := TEdit(Sender).Text; if ActiveControl = Button1 then case TEdit(Sender).Tag of 1 : Edit2.SetFocus; 2 : Edit3.SetFocus; 3 : Edit1.SetFocus; end; end; |
Erläuterung:
Klickt man auf den Button wird das Ereignis OnExit der Editfelder ausgelöst.
Das ActiveControl ist dann schon Button1, Sender das Edit das den Focus verliert.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!