Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Löschen Button nur einmal implementieren (https://www.delphipraxis.net/199973-loeschen-button-nur-einmal-implementieren.html)

delphicoder123 6. Mär 2019 23:04

Löschen Button nur einmal implementieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe mehrere Editfelder mit dazugehörigem Löschen Button.
Wenn auf Button1 geklickt wird, dann soll Edit1 gelöscht werden etc.
Das Formular sieht so aus:

https://www.delphipraxis.net/attachm...1&d=1551913338

Ich möchte aber nicht 4 Mal, den Löschen Button implementieren sondern nur einmal.
Ist das irgendwie möglich?

Vielen Dank

DieDolly 6. Mär 2019 23:09

AW: Löschen Button nur einmal implementieren
 
Auf die Schnelle würde ich sowas hier vielleicht machen. Ungetestet. Kommt alles in eine Procedure oder in "einen button click event" den alle Buttons bekommen

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 if Sender = Button1 then
  Edit1.Clear
 else if Sender = Button2 then
  Edit2.Clear;
end;
Mit Tags würde ich gar nicht erst anfangen wenn dir das in den Sinn kommt.

Uwe Raabe 7. Mär 2019 00:28

AW: Löschen Button nur einmal implementieren
 
Wenn die Namensgebung so oder zumindest prinzipiell so bleibt:
Delphi-Quellcode:
procedure TForm1.AllButtonsClick(Sender: TObject);
begin
  (FindComponent('Edit' + Copy((Sender as TButton).Name, 7, MaxInt)) as TEdit).Clear;
end;
Ist aber halt alles sehr unschön.

Alternative, wenn auch optisch anders, wäre die Buttons rauszunehmen und mehrere TButtonedEdit Controls, deren linker oder rechter Button (mit passendem Bildchen) zum Löschen verwendet wird:
Delphi-Quellcode:
procedure TForm1.AllButtonedEditsRightButtonClick(Sender: TObject);
begin
  (Sender as TButtonedEdit).Clear;
end;

EmWieMichael 7. Mär 2019 06:38

AW: Löschen Button nur einmal implementieren
 
Zitat:

Zitat von DieDolly (Beitrag 1427142)
...
Mit Tags würde ich gar nicht erst anfangen wenn dir das in den Sinn kommt.

Weil?

TigerLilly 7. Mär 2019 07:02

AW: Löschen Button nur einmal implementieren
 
* Ein Frame - je einer für ein Edit+Löschbutton
* Erzeugung von Edit+Button im Code und 4x geeignet aufrufen
* Im OnEnter des TEdits einen Button erzeugen + im OnExit wieder zerstören
* Einen Button unsichtbar anlegen, Im OnEnter des TEdits passend verschieben + sichtbar machen, im OnExit unsichtbar machen

mkinzler 7. Mär 2019 07:11

AW: Löschen Button nur einmal implementieren
 
Zitat:

Alternative, wenn auch optisch anders, wäre die Buttons rauszunehmen und mehrere TButtonedEdit Controls, deren linker oder rechter Button (mit passendem Bildchen) zum Löschen verwendet wird:
Dann würde ich aber auf Nummer sicher gehen:
Delphi-Quellcode:
procedure TForm1.AllButtonedEditsRightButtonClick(Sender: TObject);
begin
  if Sender is TButtonedEdit then
    TButtonedEdit(Sender).Clear;
end;

Uwe Raabe 7. Mär 2019 07:46

AW: Löschen Button nur einmal implementieren
 
Zitat:

Zitat von mkinzler (Beitrag 1427153)
Dann würde ich aber auf Nummer sicher gehen:

Na ja, damit wird ein etwaiger Fehler einfach ignoriert. Mit dem
Delphi-Quellcode:
as
Konstrukt kommt wenigstens eine Exception, wenn sowas unerwartet passiert. Das ist dann ein Zeichen, daß das Programm sich nicht so verhält, wie beabsichtigt - und das will ich in der Regel wissen.

haentschman 7. Mär 2019 08:06

AW: Löschen Button nur einmal implementieren
 
Zitat:

nicht so verhält, wie beabsichtigt - und das will ich in der Regel wissen
:thumb:

Dennis07 7. Mär 2019 11:21

AW: Löschen Button nur einmal implementieren
 
Beim erstellen der Komponente (mglw. im FormCreate-Event):

Delphi-Quellcode:
Edit1.Tag := Integer(Button1);
Edit2.Tag := Integer(Button2);
Edit3.Tag := Integer(Button3);
Dann die Löschbuttons im OnClick alle hiermit verknüpfen:

Delphi-Quellcode:
procedure TForm1.AllButtonedEditsRightButtonClick(Sender: TObject);
begin
  TEdit((Sender as TButton).Tag).Clear;
end;
Auch nicht die beste Lösung, aber eine. Das beste und einzig saubere wäre aber, entweder 3 Events (so würd ich es meistens machen), oder ein von TButton abgeleitetes Control, das selber eine "Edit"-Property besitzt und diese dann leert.
Auch wäre eine
Delphi-Quellcode:
TObjectDictionary<TButton, TEdit>
denkbar.

Jumpy 7. Mär 2019 11:28

AW: Löschen Button nur einmal implementieren
 
Das passt aber irgendwie nicht, müsste das nicht umgekehrt sein:

Button1.Tag := Integer(Edit1);
usw.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 Uhr.
Seite 1 von 2  1 2      

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