AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Focus auf das nächste EditFeldes setzen

Ein Thema von Susanne · begonnen am 7. Apr 2006 · letzter Beitrag vom 7. Apr 2006
Antwort Antwort
Susanne

Registriert seit: 21. Mai 2004
Ort: Lage
232 Beiträge
 
Delphi 2005 Professional
 
#1

Focus auf das nächste EditFeldes setzen

  Alt 7. Apr 2006, 12:50
Problem:

Ich habe ein Form und darauf sind bestimmt 30 EditFelder drauf. Mit der Tabtaste kann ich diese nach der Reihe anspringen. Diese Editfelder sind aber nicht immer sichtbar, weil ich verschiedene Formulare haben möchte und die meisten gehören paarweise zusammen.

z.B. edit2 objektnr edit3 objektname
edit4 kontonr edit5 kontoname
... usw

wenn ich nun edit2 etwas eingebe und dieses Feld verlasse und dieses nicht leer ist, dann gehe ich auf eine Datenbank und hole mit den entsprechenden Wert und trage ihn in edit3 ein.

wenn ich edit3 verlasse und dieses Feld nicht leer ist, gehe ich auch auf die Datenbank und hole mir einen entsprechenden Wert und trage ihn in Edit2 ein. In diesem Falle ist der Focus dann schon in Edit4 durch drücken der Tabtaste.

Problem ist nur im ersten Fall, wenn ich dir nr-Felder verlasse, dann ist der Focus dem jeweiligen name-Feld. Dies führt dazu, dass er bei verlassen dieses Feldes auch auf die Datenbank geht, aber ich genau in diesem speziellen Fall das nicht mehr möchte, da ich es gerade erst gefüllt habe.

Wie kann ich den Focus auf das jeweils übernächste sichtbare EditFeld setzen? Gibt es dafür eine Funktion, die mir entgangen ist? Hab bisher nichts gefunden.

viele Grüsse
Susanne
Susanne
  Mit Zitat antworten Zitat
milo

Registriert seit: 22. Mär 2006
Ort: Schwalmtal
68 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Focus auf das nächste EditFeldes setzen

  Alt 7. Apr 2006, 13:01
Hallo Susanne,

keine Ahnung ob ich das verstanden habe was Du willst, aber Du kannst die Ereignisse davon
abhängig machen, ob das Feld focussiert ist oder nicht (If Edit2.Focused).

Gruß Milo
Michael Lorenz
Delphi seit FieldTest 1 ... im letzten Jahrhundert ...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Focus auf das nächste EditFeldes setzen

  Alt 7. Apr 2006, 13:15
Ja, ja der alte Kundenwunsch, alles automatisch zu erledigen (nur enter drücken und fertig).
Das gibt diverse Probleme, die du mindestens zum Teil schon erlebt hast:
1. Editfeld wird verlassen und die Aktion wird ausgeführt, obwohl gar nichts verändert wurde.
2. Der Focus soll in abhängigkeit eines Zustands irgendwo hinspringen, und nicht zum nächsten Eingabefeld.

Lass uns dein Problem vereinfachen:
A+5=C

Eingabe A ENTER: C soll ausgerechnet werden.
Eingabe C ENTER: A soll ausgerechnet werden.

Wie kann man das lösen?

Ich würde folgendes machen:
1. OnEnter-Ereignis der Eingabefelder definieren:
Delphi-Quellcode:
Procedure TMyForm.Edit1Enter (Sender : TObject)
Begin
  LastEditField := Sender AS TEdit;
End;
Im o.g. Beispiel Wird also EditA.OnEnter und EditB.OnEnter auf diese Methode zeigen.

Damit weisst Du, wo der Focus vorher war, wenn er gerade nicht in einem der besagten Edit-Fields ist.
Dann schmeisst du ein Button auf die Form mit 'Default=True'. Left = -100, also unsichtbar. Tabstop = False, damit der Button nicht fokusierbar ist (per Tab). Durch 'Default=True' reagiert der Button auf 'ENTER'.

Im OnClick-Ereignis des Buttons führst Du dann die Funktion aus. Über 'LastEditField' weisst Du genau, woher der Focus kam, bzw. in welchem Edit-Feld der Anwender zuletzt war und wo Du nun hinspringen musst.

Auf unser Beispiel angewandt:
Delphi-Quellcode:
Procedure TMyform.EnterButtonClick (Sender : TObject);
Begin
  If LastEditField = EditA Then Begin // Focus war auf 'A', C soll ausgerechnet werden
    EditC.Text := IntToStr (StrToInt (EditA.Text) + 5));
    EditA.SetFocus;
  End
  Else Begin
    EditA.Text := IntToStr (StrToInt (EditC.Text) - 5));
    EditC.SetFocus;
  End
End;
Es geht natürlich auch über OnKeyPress, aber ich finde, mit einem versteckten Button ist es nachvollziehbarer.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz