Edit.Change auslösen verhindern

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
flashkid
Beiträge: 35
Registriert: So 14. Feb 2010, 18:15

Edit.Change auslösen verhindern

Beitrag von flashkid »

Hi.

Ich schon wieder :P
Ich habe 2 Edit Felder in meinem Programm, welche dem User ermöglichen sollen einen Wert in PS oder KW anzugeben. Sobald ein Wert eingegeben wird, soll er auch im anderen Edit Feld per Umrechnung eingetragen werden, allerdings nur auf 2 Stellen genau.
Das funktioniert soweit auch, das Problem dabei ist nur, dass auch die Methode Edit2.Change aufgerufen wird, wenn ich

Code: Alles auswählen

Edit2.Text := FloatToInt(RoundTo(KW),-2);
Kann man das irgendwie verhindern? Oder habe ich irgendwas falsch gemacht :P

Gruß, flashkid

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Edit.Change auslösen verhindern

Beitrag von Teekeks »

Hi!
Eine Idee wäre es temporär die Variable Edit2.OnCange auf nil zu setzen und danach diese wieder zurück zu setzen.

flashkid
Beiträge: 35
Registriert: So 14. Feb 2010, 18:15

Re: Edit.Change auslösen verhindern

Beitrag von flashkid »

Du meinst wohl die Methode OnChange auf null zu setzen? Das habe ich nicht hinbekommen :(
Ich frage nun eine Variable "RealChange" ab und wenn diese "0" ist, dann wird sie auf "1" gesetzt und wenn sie auf "1" ist, dann wird der Wert wirklich geändert.
Zwar ein wenig umständlich, aber funktioniert :)

Meintest du das so oder per Methode ändern?

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Edit.Change auslösen verhindern

Beitrag von Hitman »

Er meint wohl genau das, was er sagte ;-)
Edit2.OnChange := nil;

flashkid
Beiträge: 35
Registriert: So 14. Feb 2010, 18:15

Re: Edit.Change auslösen verhindern

Beitrag von flashkid »

So blöd kanns gehen, ich dachte das wäre ein Tippfehler :oops:
So funktioniert das natürlich :)

mannewolff
Beiträge: 10
Registriert: Mi 6. Jan 2010, 17:25
OS, Lazarus, FPC: L 0.9.28.2 FPC 2.2.4
CPU-Target: 32Bit
Wohnort: Bremen

Re: Edit.Change auslösen verhindern

Beitrag von mannewolff »

Teekeks hat geschrieben:Hi!
Eine Idee wäre es temporär die Variable Edit2.OnCange auf nil zu setzen und danach diese wieder zurück zu setzen.
Das Problem hat man ja öfter. Ich definiere für jedes Form eine Variable (z.B. semaphore). Jeder Ereignismethode beginnt mit

Code: Alles auswählen

if semaphore then exit;
Falls ich z.B. Daten in die Controls lade und nicht möchte, dass mein "mustSave" Flag von den OnChange-Handlern gesetzt wird, setzte ich die Variable erst auf true und hinterher wieder zurück.

Code: Alles auswählen

semaphore := true;
edtName.Text := 'asdf';
edtVorname.Text := 'sdfsdfs';
semaphore := false;
So kann ich alle Handler, die ich temporär nicht gebrauchen kann, ausschalten. Das ist generisch und ich muss mir nicht dutzende Ereigenishandler merken, die ich zunächst auf nil setzte, damit ich sie dann wieder zurücksetzen muss.

-manne

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: Edit.Change auslösen verhindern

Beitrag von lrlr »

@mannewolff

mach ich auch so,nur:

1. ohne exit (ich mag exit nicht) sondern mit "normalem" if then begin end"
2. nicht als boolean sonder integer
3. mit try finally

also

Code: Alles auswählen

if semaphore = 0 then begin
  ... 
end;

Code: Alles auswählen

inc( semaphore);
try
    edtName.Text := 'asdf';
    edtVorname.Text := 'sdfsdfs';
finally
  dec( semaphore);
end;

Antworten