Einzelnen Beitrag anzeigen

Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Ansteuerung von einem statt zwei Editfelder

  Alt 15. Aug 2019, 08:13
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 = 'Edit1then
  begin
  
  end else if sLastEdit = 'Edit2then
  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).
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (15. Aug 2019 um 09:47 Uhr)
  Mit Zitat antworten Zitat