![]() |
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: ![]() Ich möchte aber nicht 4 Mal, den Löschen Button implementieren sondern nur einmal. Ist das irgendwie möglich? Vielen Dank |
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:
Mit Tags würde ich gar nicht erst anfangen wenn dir das in den Sinn kommt.
procedure TForm1.Button1Click(Sender: TObject);
begin if Sender = Button1 then Edit1.Clear else if Sender = Button2 then Edit2.Clear; end; |
AW: Löschen Button nur einmal implementieren
Wenn die Namensgebung so oder zumindest prinzipiell so bleibt:
Delphi-Quellcode:
Ist aber halt alles sehr unschön.
procedure TForm1.AllButtonsClick(Sender: TObject);
begin (FindComponent('Edit' + Copy((Sender as TButton).Name, 7, MaxInt)) as TEdit).Clear; end; 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; |
AW: Löschen Button nur einmal implementieren
Zitat:
|
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 |
AW: Löschen Button nur einmal implementieren
Zitat:
Delphi-Quellcode:
procedure TForm1.AllButtonedEditsRightButtonClick(Sender: TObject);
begin if Sender is TButtonedEdit then TButtonedEdit(Sender).Clear; end; |
AW: Löschen Button nur einmal implementieren
Zitat:
Delphi-Quellcode:
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.
as
|
AW: Löschen Button nur einmal implementieren
Zitat:
|
AW: Löschen Button nur einmal implementieren
Beim erstellen der Komponente (mglw. im FormCreate-Event):
Delphi-Quellcode:
Dann die Löschbuttons im OnClick alle hiermit verknüpfen:
Edit1.Tag := Integer(Button1);
Edit2.Tag := Integer(Button2); Edit3.Tag := Integer(Button3);
Delphi-Quellcode:
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.
procedure TForm1.AllButtonedEditsRightButtonClick(Sender: TObject);
begin TEdit((Sender as TButton).Tag).Clear; end; Auch wäre eine
Delphi-Quellcode:
denkbar.
TObjectDictionary<TButton, TEdit>
|
AW: Löschen Button nur einmal implementieren
Das passt aber irgendwie nicht, müsste das nicht umgekehrt sein:
Button1.Tag := Integer(Edit1); usw. |
AW: Löschen Button nur einmal implementieren
Wenn die Frames in Delphi nicht so seltsam wären, würde ich ein Frame vorschlagen mit einem Edit und einem Button und davon dann einfach so viele wie gewünscht auf die Form legen.
Die Verdrahtung zwischen Button und Edit erfolgt einmalig im Frame. |
AW: Löschen Button nur einmal implementieren
Zitat:
|
AW: Löschen Button nur einmal implementieren
Zitat:
|
AW: Löschen Button nur einmal implementieren
Zitat:
Jetzt lege dir davon ein paar auf ein Form und verschiebe die Frames mit der Maus. Genau, sehr leicht hat man nicht das Frame, sondern das Edit-Control in dem Frame verschoben. |
AW: Löschen Button nur einmal implementieren
Zitat:
Außerdem: Klick auf das Edit, dann ESC, damit hat das Frame die drag handles. |
AW: Löschen Button nur einmal implementieren
Zitat:
|
AW: Löschen Button nur einmal implementieren
Man kann das doch fixieren. Oder ist
![]() Sherlock |
AW: Löschen Button nur einmal implementieren
Frames kann man benutzen, aber in der KomponentenPalette wurde ich das tunlichst vermeiden.
Damit gab es bei mir mal ziemliche Probleme wenn denn die FrameKomponente einen Bug hat, dann lassen sich ganze Projekte nur noch mit viel Mühe wieder laden. Aber Frames als separate "Form-ähnliche" Container benutze ich mittlerweile sehr oft, und diese Lade ich zur Laufzeit in Panels, oder andere Container. Das geht wunderbar, und ist für mich ein guter Kompromiss zw. RAD und alles im Code definieren. So kann ich alles Visuelle perfekt "RAD" auf dem Frame machen, und den Rest in Code. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz