![]() |
Problem mit TEdit und String
Hallo, ich habe da ein Problem mit einem Edit-Feld. Den Quellcode habe ich bis auf 2 Zeilen reduziert. Programm stürtz mit Fehlermeldung "... EStackOverflow ... StackÜberlauf ..." ab.
Es soll sich bei jeder Änderung (programmiert oder eingegeben) der Text ändern:
Delphi-Quellcode:
Eigentlich wollte ich das programmieren (was auch nicht funktionierte):
procedure TForm1.Edit1Change(Sender: TObject);
var s: String; begin s := Edit1.Text + ' BlaBla'; Edit1.Text := s; end;
Delphi-Quellcode:
Auf dem Formular ist nichts außer dem EditFeld. Code ist im OnChange-Ereignis.
procedure TForm1.Edit1Change(Sender: TObject);
begin Edit1.Text := Edit1.Text + ' BlaBla'; end; Was ist die Ursache (bitte kein Fachchinesisch, bin Anfänger)? Wie kann man die Aufgabe erfüllen und den Absturz vermeiden? PS: Wozu muß ich die Programmiersprache nochmal eingeben - habe ich doch bei der Registrierung ins Profil schonmal eingetragen? Könnte das nicht oben automatisch erscheinen? |
Re: Problem mit TEdit und String
Herzlich Willkommen in der DP! :cheers:
Cool, ich hab auch noch Delphi 2.0 (im Profil steht 5, hab ich auch) Zitat:
Zu Deinem Problem: Problem: Wenn Du in einer OnChange den Text änderst löst Du wieder eines aus, indem Du den Text wieder änderst, also wieder ein OnChange auslöst, indem Du wieder ... Bis es kracht. Lösung: Das OnChange vorübergehend deaktivieren.
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin Edit1.OnChange:=nil; Edit1.Text := Edit1.Text + ' BlaBla'; Edit1.OnChange:=Edit1Change; end; |
Re: Problem mit TEdit und String
Zitat:
Es gäbe noch die Möglichkeit über eine eigene Variable. Wobei dieses vorallem Vorteile hätte, wenn mehrere Ereignisprozeduren wärend "gesperrt" werden sollen.
Delphi-Quellcode:
für nur eine Ereignisprozedur ist das natürlich eventuell ewas "zuviel" Aufwand :angel:
var irgendwas: boolean; // oder in der klasse definiert
procedure TForm1.Edit1Change(Sender: TObject); begin if irgendwas then exit; irgendwas := true; Edit1.Text := ...; Edit2.Text := ...; irgendwas := false; end; procedure TForm1.Edit2Change(Sender: TObject); begin if irgendwas then exit; irgendwas := true; Edit1.Text := ...; Edit2.Text := ...; irgendwas := false; end; Wenn die Ereignisprozedur auch veränderlich sein könnte, dann sollte man die aktuelle Zuweisung zwischenspeichern und danach wiederherstellen, :warn: was bei der Methode mit Zusatzvariable natülich nicht nötig wäre.
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var NE: TNotifyEvent; begin NE := @Edit1.OnChange; Edit1.OnChange := nil; Edit1.Text := Edit1.Text + ' BlaBla'; Edit1.OnChange := @NE; end; PS: hab hier och Mehreres? D1, D4, D5, D7, D05, DSB06 und Turbo ... also was soll's? D4/D7 wird aber genutzt ^^ |
Re: Problem mit TEdit und String
Hallo,
das Anhängen einer String-Konstante bringe ich mit Eingabefeldern für Geldbeträge oder physikalische Größen in Verbindung. Dort verbindet man die Anzeige aber nicht mit dem Ereignis OnChange(), sondern hängt die Einheitenbezeichnung im Ereignis OnExit() an und entfernt sie beim Ereignis OnEnter(). Freundliche Grüße vom marabu |
Re: Problem mit TEdit und String
@himitsu
Jupp, das stimmt schon, aber ich wollte es für einen Anfänger mal ganz einfach erklären (so wie gewünscht), meistens kommen dann eh weitere Fragen. |
Re: Problem mit TEdit und String
Zitat:
|
Re: Problem mit TEdit und String
Zitat:
Wollt ich nur mal festhalten :zwinker: Aber jetzt wieder genug OT :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 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