Mal nebenbei, der Code (vom TE) ist viel zu lang. Folgendes sollte das gleiche bewirken (wie der vom TE) ohne einen Helpstring:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
if Edit1.Showing then
begin
Edit1.Text := Edit1.text + '1';
end else if Edit2.Showing then
begin
Edit2.text := Edit2.text + '1';
end;
end;
@TE: was philipp.hofmann geschrieben hat ist denke ich ein guter Ansatz. Mach dir Gedanken was eine wirklich einmalige Bedingung ist. Mal ein paar Beispiele:
- Kann im Edit.text als letztes Zeichen eine "1" stehen, bevor du sie hinzufügst? Wenn nicht, könntest du das abfragen.
- Werden die Edit wirklich ausgeblendet, das .showing oder .visible hier sinnvolle Abfragen wären?
- Ist der eingegebene Text ggf. vor dem Hinzufügen der "1" immer gleich lang? Könnte man dies im OnChange abfragen und auf den Button verzichten.
usw.
BTT:
Es gibt noch mehr Möglichkeiten:
Man setzt beim Ändern des jeweiligen Edit eine globale Variable, welche anzeigt welches Edit als letztes bearbeitet wurde (im OnChange) und somit die Steuerung übernimmt. Ist zwar keine schöne Methode aber würde funktionieren.
Delphi-Quellcode:
var
sLastEdit : string;
procedure EditChange(Sender: TObject);
begin
sLastEdit := TEdit(Sender).Name;
end;
procedure TTools.KopierenClick(Sender: TObject);
begin
if sLastEdit = 'Edit1' then
begin
end else if sLastEdit = 'Edit2' then
begin
end;
end;
Oder noch einfacher du setzt den Button auf Default (idealerweise im OnEnter der Editfelder, falls du andere Buttons zwischendurch als Default brauchst, daher beim OnExit diesen wieder zurücksetzen), dann bleibt der Focus auch auf dem Edit:
Wichtig: Die Eingabe muss dann mit der "Enter"-Taste bestätigt werden damit dies so funktioniert!
Delphi-Quellcode:
procedure TForm1.EditEnter(Sender: TObject);
begin
//Falls der Default ein anderer Button hat hier austragen
Button2.Default := True;
end;
procedure TForm1.EditExit(Sender: TObject);
begin
Button2.Default := False;
//Falls der Default ein anderer Button haben soll hier eintragen
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Edit1.Focused then
begin
Edit1.Text := Edit1.text + '1';
end else if Edit2.Focused then
begin
Edit2.text := Edit2.text + '1';
end;
end;
//Als Alternative (hier wäre es jedoch egal welches Edit aktiv ist):
procedure TForm1.Button2Click(Sender: TObject);
var
cEdit : TEdit;
begin
cEdit := TEdit(Tools.FindComponent(activeControl.Name));
Edit.text := Edit.Text + '1';
end;
(Wenn das die einzige Stelle ist an der ein Button auf "Enter" bei einem Edit reagieren soll bzw. es keine anderen Stellen gibt wo der Default gebraucht wird, kannst du das auch im Objektinspector direkt einstellen. Hier muss man sich aber wirklich sicher sein, da es sonst zu Nebeneffekten kommen kann!)
...viele Wege führen nach Rom. Sie sind nur anders (besser/schlechter).