Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi RadioGroup und OnClick (https://www.delphipraxis.net/60946-radiogroup-und-onclick.html)

delphien 14. Jan 2006 16:36


RadioGroup und OnClick
 
hi, im OnClick-Handler frage ich den Indexwert des Eintrages ab.
Wenn ich den Eintrag anklicke wird der entsprechende Code ausgeführt,
nach einem zweiten Klick aber nicht mehr. Habe ich da was vergessen ?

marabu 14. Jan 2006 17:02

Re: RadioGroup und OnClick
 
Hallo.

Eine TRadioGroup ist nicht dazu gedacht eine externe Aktion anzustoßen. Das Ereignis OnClick() signalisiert eine Veränderung von ItemIndex und du kannst darauf reagieren. Beim zweiten Klicken wird diese Eigenschaft nicht verändert - ergo kein Ereignis. Willst du eine Aktion auslösen, so solltest du ein Control verwenden, welches für das Auslösen von Aktionen konzipiert ist. Als Daumenregel kann gelten, dass solche Benutzerschnittstellen-Elemente eine property Action besitzen.

Grüße vom marabu

delphien 14. Jan 2006 20:46

Re: RadioGroup und OnClick
 
hi, greift die Daumenregel auch bei RadioButtons ? Trotz Action-Eigenschaft reagiert der Button nicht nach einem zweiten Klick. Was mache ich falsch ?

jim_raynor 14. Jan 2006 20:54

Re: RadioGroup und OnClick
 
Zitat:

Zitat von delphien
hi, greift die Daumenregel auch bei RadioButtons ? Trotz Action-Eigenschaft reagiert der Button nicht nach einem zweiten Klick. Was mache ich falsch ?

Wenn es keine Ausnahmen geben würde, wärs ja keine Daumenregel ^^ Zur Not nimm doch MouseDown oder MouseUp.

rory 14. Jan 2006 23:14

Re: RadioGroup und OnClick
 
Zitat:

Zitat von marabu
Hallo.

Eine TRadioGroup ist nicht dazu gedacht eine externe Aktion anzustoßen. Das Ereignis OnClick() signalisiert eine Veränderung von ItemIndex und du kannst darauf reagieren. Beim zweiten Klicken wird diese Eigenschaft nicht verändert - ergo kein Ereignis. Willst du eine Aktion auslösen, so solltest du ein Control verwenden, welches für das Auslösen von Aktionen konzipiert ist. Als Daumenregel kann gelten, dass solche Benutzerschnittstellen-Elemente eine property Action besitzen.

Grüße vom marabu

Marabu hat völlig Recht. Allerdings kannst Du beim nächsten Anzeigen der RG den Index auf -1 setzen, wodurch Du wieder auf einen RB klicken kannst (auch denselben wie vorher). Ist nicht weiter kompliziert, benötigt aber ein globales Word für die Zwischenspeicherung des GB.Index, welches das alte mit dem neuen Item vergleichen kann.

Man (wie ich) murxt in Delphi gerne unelegant herum :-)

gfjs 17. Jan 2006 06:33

Re: RadioGroup und OnClick
 
@ Delphien

Guten Morgen.

Ich hatte gerade ein ähnliches Problem:

Mit 4 RadioButtons kann der Anwender auswählen, ob eine Aufgabe jede Woche, 14-tätig, alle 3 oder 4 Wochen ausgeführt werden soll. Je nach Auswahl erscheinen dann weitere RadioButtons zur näheren Bestimmung (z.B. erste Auswahl 14-tägig, zweite Auswahl gerade oder ungerade Kalenderwoche). Ich habe die RBs nicht in einer RadioGroup sondern in einer GroupBox platziert. Die Steuerung der weiteren Auswahlmöglichkeiten erfolgt über die onClick-Ereignisse der RBs - das klappt tadellos. Wenn die Auswahl in der ersten GroupBox geändert wird, ändert sich aus die Auswahl in der zweiten GroupBox entsprechend. Der einzige (kleine) Nachteil ist, dass die Auswahl nicht direkt aus einem Index (wie bei der RadioBox) ausgelesen werden kann, sondern die RBs über eine Schleife abgefragt werden müssen.

Vielleicht ist diese Lösung für Dich ja auch praktikabel.

mfg gfjs

marabu 17. Jan 2006 10:16

Re: RadioGroup und OnClick
 
Guten Morgen, gfjs.

Es geht ohne eine Schleife, wenn du den RadioButtons im tag property einen eindeutigen Wert zuweist. Diesen kannst du dann im gemeinsamen OnClick() event handler zur Steuerung deiner Aktionen verwenden:

Delphi-Quellcode:
procedure TDemoForm.RadioButtonClick(Sender: TObject);
begin
  with Sender as TRadioButton do
    case Tag of
      1: ShowMessage('have');
      2: ShowMessage('a');
      3: ShowMessage('nice');
      4: ShowMessage('day');
    end;
end;
Freundliche Grüße vom marabu

gfjs 18. Jan 2006 05:25

Re: RadioGroup und OnClick
 
Guten Morgen, marabu.

Vielen Dank für den Hinweis. Ich bin noch Anfänger und habe diese Möglichkeit auch schon ein paarmal verwendet. In meinem speziellen Fall, kann ich darauf aber nicht zurückgreifen, da ich das Tag für einen anderen Zweck verwende und nicht immer eindeutige Werte drin stehen.

mfg gfjs


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