AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TCheckBox.Checked löst OnClick aus?

Ein Thema von Leanahtan · begonnen am 3. Jan 2010 · letzter Beitrag vom 4. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
Leanahtan

Registriert seit: 5. Jun 2009
62 Beiträge
 
Turbo Delphi für Win32
 
#1

TCheckBox.Checked löst OnClick aus?

  Alt 3. Jan 2010, 17:05
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?
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#2

Re: TCheckBox.Enabled löst OnClick aus?

  Alt 3. Jan 2010, 17:10
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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: TCheckBox.Enabled löst OnClick aus?

  Alt 3. Jan 2010, 17:18
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:
CheckBox1.OnClick := nil;
CheckBox1.Enabled := not CheckBox1.Enabled;
CheckBox1.OnClick := CheckBox1Click;
Aber du solltest auf alle Fälle die Ursache finden, denn normal ist dein gezeigtes verhalten nicht.

Grüße, Matze
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#4

Re: TCheckBox.Enabled löst OnClick aus?

  Alt 3. Jan 2010, 17:32
Zitat von Leanahtan:
Hab mir jetzt erstmal notgedrungen mit OnMouseUp geholfen
Also, wenn ich das richtig verstanden habe, wird doch im normalen auf die Checkbox.Enebled := false, diese nur Enabled = false
und bei True umgekehrt. Jetzt ist aber doch die Frage, wie weißt Du den dieses Enabled zu.

Delphi-Quellcode:

Button.Click..
  begin
    Checkbox1.Enabled := false;
  end;
Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Leanahtan

Registriert seit: 5. Jun 2009
62 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: TCheckBox.Enabled löst OnClick aus?

  Alt 3. Jan 2010, 17:40
Danke für die Antworten. Erstmal hab ich mich verschrieben. 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 WalkAbleCheckBox.Checked:=TGroundTile(GroundTilesListView.ItemFocused.Data).Walkable; 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).
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#6

Re: TCheckBox.Checked löst OnClick aus?

  Alt 3. Jan 2010, 17:51
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:
procedure TForm1.Button1Click(Sender: TObject);
begin
  CheckBox1.Checked := not CheckBox1.Checked
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  ShowMessage('OnClick wurde ausgeführt');
end;
Ändert man es ab, wie Matze geschrieben hat, ist der Fehler weg. Das ist ja keine Fehler, sondern scheinbar bei Delphi normal.

Delphi-Quellcode:
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;
Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#7

Re: TCheckBox.Checked löst OnClick aus?

  Alt 3. Jan 2010, 17:56
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Leanahtan

Registriert seit: 5. Jun 2009
62 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: TCheckBox.Checked löst OnClick aus?

  Alt 3. Jan 2010, 18:28
Zitat von Jens Hartmann:
Ändert man es ab, wie Matze geschrieben hat, ist der Fehler weg. Das ist ja keine Fehler, sondern scheinbar bei Delphi normal.
Schon möglich, dass das normal ist. Geht aber nicht unbedingt aus der Hilfe hervor (Zitat: Setzt den Wert der Eigenschaft Checked. ... SetChecked ist die als protected deklarierte Implementierung der Eigenschaft Checked. Durch Überschreiben der Methoden SetChecked und GetChecked ändern Sie die Eigenschaft Checked in abgleiteten Klassen. - zugegeben, bei OnClick steht es dann doch). Und es bleibt die Frage, warum dabei standardmäßig OnClick ausgelöst wird. Es muss doch eine "feste Regel" geben, damit man nicht immer ausprobieren muss, bei welcher Wertänderung eventuell auch noch irgendein Event ausgelöst wird.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#9

Re: TCheckBox.Checked löst OnClick aus?

  Alt 3. Jan 2010, 18:32
Zitat von Leanahtan:
Es muss doch eine "feste Regel" geben, damit man nicht immer ausprobieren muss, bei welcher Wertänderung eventuell auch noch irgendein Event ausgelöst wird.
Aus Interesse: Da gebe ich Dir Recht. Ich habe das bislang auch nicht gewusst und suche gerade schon in meinem Programm, ob ich irgendwelche dieser Funktionen etc. eingebaut habe, wo mir das noch nicht aufgefallen ist.

Vieleicht kann das ja mal jemand näher erläutern.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#10

Re: TCheckBox.Checked löst OnClick aus?

  Alt 3. Jan 2010, 18:45
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 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