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 user profile iconNarses: 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, 00);                    

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
  //Vor Wechsel zum nächsten Edit Daten verarbeiten, z.B. 
  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.