Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Erst bei Edit-Wert Änderungen seichern (Button Enable) (https://www.delphipraxis.net/3405-erst-bei-edit-wert-aenderungen-seichern-button-enable.html)

BorlanDelphiUser 10. Mär 2003 19:16


Erst bei Edit-Wert Änderungen seichern (Button Enable)
 
Ich habe folgendes Problem. Ich habe ein Formular mit einem oder mehreren Edit Feldern und eine Button. Der Button ist deaktiviert. Wenn sich jetzt eines der Editfelder ändert soll der Button aktiviert werden.

- Sinn der ganzen Sache. Man kann erste speichern wenn sich die Werte in den Edit Feldern ändern -

Hier noch einmal ein Beispiel um den Ablauf zu verdeutlichen: Das Formular wird auf aufgerufen das Editfeld hat den z.B. "Hallo Welt" jetzt lösche ich "Welt" und der Button soll aktiviert werden. Bis hier hin hab ich kein Problem. Jetzt komms, ich scheibe wieder "Welt" hinzu, und der Button soll wieder deaktiviert werden, da sich ja nicht am Ausgangswert geändert hat.

Dank schon mal im voraus!

Tpercon 10. Mär 2003 19:22

Du mußt dir zuerst mal speichern, was in den Edit Komponenten steht. Im OnChange fragst du dann ab, ob sich was geändert hat und vergleichst das mit den ursprünglichen Werten.

Gruß

Chewie 10. Mär 2003 19:24

Jedes Edit hat ein Ereignis OnChange. Das wird aufgerufen, wenn sich der Text ändert.
Um den Button jetzt nur zu aktivieren, wenn, wie in deinem Beispiel, der Text "Hello World" drinsteht, kannst du folgendes tun:

Delphi-Quellcode:
procedure TForm1.Edit1OnChange(Sender: TObject);
const
  sReq = 'Hello world';
begin
  if Edit1.Text = sReg then Button1.Enabled := False;
end;

BorlanDelphiUser 10. Mär 2003 19:49

Zitat:

Zitat von Tpercon
Du mußt dir zuerst mal speichern, was in den Edit Komponenten steht. Im OnChange fragst du dann ab, ob sich was geändert hat und vergleichst das mit den ursprünglichen Werten.

Gruß


Die Variante hab ich schon probiert sie funktioniert auch. Bei 20 Eingabefeldern ist das aber ne Menge source und umständlich. Suche sowas ähnliches wie

self.text bloss das bezieht sich auf das formular sodass ich einen funktion für alle editfelder im onchange benutzen kann

Trotzdem Danke!

Tpercon 10. Mär 2003 20:07

Und wenn du die Werte der Edit's in nem Array speicherst. Die Position des Wertes gibt das Tag vom Edit an, dann würde eine OnChange Procedure reichen und du kannst mit dem sender spielen.

BorlanDelphiUser 10. Mär 2003 20:18

Zitat:

Zitat von Tpercon
Und wenn du die Werte der Edit's in nem Array speicherst. Die Position des Wertes gibt das Tag vom Edit an, dann würde eine OnChange Procedure reichen und du kannst mit dem sender spielen.

Wie mach ich das mit dem sender. Der rest ist mir ja klar.

Wär nett wenn du das mit dem Sender nochmal erklärst.

Chewie 10. Mär 2003 21:25

Ich werd da helfen können:

Der Sender ist das Objekt, dass das Ereignis hervorruft. Leider ist der Sender vom Typ TObject, unser Edit aber vom Typ TEdit.
Glücklicherweise ist TEdit aber von TObject abgeleitet, und unser Sender enthält, obwohl er vom Typ TObject ist, alle Eigenschaften und Methoden des Typs TEdit. Wir müssen Delphi nur noch mitteilen, dass es sich bei unserem Sender um ein Objekt des Typs TEdit handelt. Das können wir auf zwei Arten tun:

1.
Delphi-Quellcode:
procedure TForm1.Edit1OnChange(Sender: TObject);
const
  sReq = 'Hello world';
begin
  if TEdit(Sender).Text = sReg then Button1.Enabled := False;
end;
2.
Delphi-Quellcode:
procedure TForm1.Edit1OnChange(Sender: TObject);
const
  sReq = 'Hello world';
begin
  if (Sender as TEdit).Text = sReg then Button1.Enabled := False;
end;
Beides bewirkt das Gleiche, nämlich dass Delphi annimmt, es handle sich um ein TEdit-Objekt. Falls unser Sender allerdings mal kein TEdit wäre, könnte das allerdings eine Access Violation geben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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