![]() |
TCheckBox.Checked löst OnClick aus?
Ich habe gerade festgestellt, das eine Wertzuweisung an TCheckBox.Checked ein OnClick auslöst. Ist das normal? Wenn ja, kann man den Status auch ändern, ohne ein OnClick auszulösen? Hab mir jetzt erstmal notgedrungen mit OnMouseUp geholfen, aber mir leuchtet das Verhalten von Delphi an der Stelle nicht ganz ein. Bei was wird dann OnClick alles ausgelöst? :gruebel:
|
Re: TCheckBox.Enabled löst OnClick aus?
Hallo,
deine CheckBox hat ein OnClick Ereigniss. Das wird ausgelößt. Ist doch auch gut so, damit kannst Du ja schließlich was machen. Allerdings, wenn du nichts in dem Ereigniss hast, passiert auch nichts. Was steht den in deiner Zuweisung. Gruß Jens |
Re: TCheckBox.Enabled löst OnClick aus?
Hallo,
bei einer Änderung von "Enabled" wird bei mir kein OnClick-Ereignis ausgelöst (Turbo Delphi). Falls du dennoch wissen möchtest, wie man das OnClick-Ereignis vorübergehend deaktivieren kann, so ginge es:
Delphi-Quellcode:
Aber du solltest auf alle Fälle die Ursache finden, denn normal ist dein gezeigtes verhalten nicht.
CheckBox1.OnClick := nil;
CheckBox1.Enabled := not CheckBox1.Enabled; CheckBox1.OnClick := CheckBox1Click; Grüße, Matze |
Re: TCheckBox.Enabled löst OnClick aus?
Zitat:
und bei True umgekehrt. Jetzt ist aber doch die Frage, wie weißt Du den dieses Enabled zu.
Delphi-Quellcode:
Gruß JensButton.Click.. begin Checkbox1.Enabled := false; end; |
Re: TCheckBox.Enabled löst OnClick aus?
Danke für die Antworten. Erstmal hab ich mich verschrieben. :oops: Ich meinte natürlich checked und nicht enabled ^^
Also es gibt schon Fälle, wo man den Wert ändern will, ohne das ein OnClick ausgelöst wird. Ich habe z.B. eine Liste, und wenn ein Eintrag den Focus erhält, dann wird
Delphi-Quellcode:
entsprechend dem zum Listeneintrag gehörigen Objekt geändert. Bei OnClick wird er hingegen ins Objekt geschrieben. Wäre im Prinzip kein Problem - aber ich nutze multiselect, um einzelne Werte für mehrere Objekte gleichzeitig zu ändern. Wenn mehrere Listeneinträge ausgewählt sind, dann wird bei OnClick der Wert für alle zugehörigen Objekte geändert. Das ist bei mir aber schon passiert, wenn der Nutzer nur einen weiteren Listeneintrag ausgewählt hat (weil dann ja WalkAbleCheckBox.Checked neu gesetzt wird).
WalkAbleCheckBox.Checked:=TGroundTile(GroundTilesListView.ItemFocused.Data).Walkable;
|
Re: TCheckBox.Checked löst OnClick aus?
Hallo Leanahtan,
du hast recht. ich habe das gerade mal ausprobiert. Bei unten gezeigtem Code, kommt bei jedem Click auf den Button die MessageBox.
Delphi-Quellcode:
Ändert man es ab, wie Matze geschrieben hat, ist der Fehler weg. Das ist ja keine Fehler, sondern scheinbar bei Delphi normal.
procedure TForm1.Button1Click(Sender: TObject);
begin CheckBox1.Checked := not CheckBox1.Checked end; procedure TForm1.CheckBox1Click(Sender: TObject); begin ShowMessage('OnClick wurde ausgeführt'); end;
Delphi-Quellcode:
Gruß Jens
procedure TForm1.Button1Click(Sender: TObject);
begin CheckBox1.OnClick := nil; CheckBox1.Checked := not CheckBox1.Checked; CheckBox1.OnClick := CheckBox1Click; end; procedure TForm1.CheckBox1Click(Sender: TObject); begin ShowMessage('OnClick wurde ausgeführt'); end; |
Re: TCheckBox.Checked löst OnClick aus?
einfache Möglichkeit:
In alle Ereignisprozeduren if FLocked then Exit; und wärend des Setzens von .Checked dieses FLocked (global in der Form) auf TRUE setzen. andere Möglichkeit: Bei der CheckBox und allen anderen CheckBoxen, mit dem gleichen GroupIndex, vor der Zuweisung auf .Checked das .OnClick auf NIL sezten und nach dem Setzen die notfalls vorher gespeicherten Ereignisprozeduren wieder eintragen. |
Re: TCheckBox.Checked löst OnClick aus?
Zitat:
|
Re: TCheckBox.Checked löst OnClick aus?
Zitat:
Vieleicht kann das ja mal jemand näher erläutern. Gruß Jens |
Re: TCheckBox.Checked löst OnClick aus?
Ich glaube die CheckBoxen sind die einzigen mit diesem "Fehler". Besser wäre es gewesen das Ereigniss OnChange zu nennen. Dann wüsste jeder wann es ausgelöst wird.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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-2025 by Thomas Breitkreuz