Sicherstellen, dass immer mindestens 1 Element in einem TPopup-Menü ausgewählt ist
-
12-12-2019 - |
Frage
Ich habe ein POPUP-Menü mit 3 Elementen mit den folgenden Eigenschaften eingerichtet.
AutoCheck = True
RadioItem = True
und für den ersten Menüpunkt stelle ich die ein Checked
eigentum zu True
außerdem wird das Menü, in dem mindestens 1 Element ausgewählt ist, zunächst angezeigt.Das ist alles gut und gut, aber wenn ich auf das aktuell ausgewählte Element klicke, verschwindet das Häkchen (Punkt) und ich möchte es so gestalten, dass immer mindestens 1 Element im Popup ausgewählt ist.Wie mache ich das?
Lösung
Die Elemente in der Gruppe sollten auch denselben Wert ungleich Null haben GroupIndex
.Dies zusammen mit RadioItem
sollte dafür sorgen, dass sich die Elemente wie eine Funkgruppe verhalten.
Es scheint jedoch, dass AutoCheck
respektiert nicht GroupIndex
und RadioItem
eigenschaften, da die Prüfung gelöscht wird, wenn Sie auf ein aktuell überprüftes Element klicken.(Dies könnte wohl als Fehler in der VCL angesehen werden.)
Hier ist eine Problemumgehung:
Setzen AutoCheck
zu False
, weisen Sie allen Elementen den gleichen Wert ungleich Null zu GroupIndex
und eine gemeinsame OnClick
handler, um das angeklickte Element wie folgt zu überprüfen:
procedure TForm1.ItemClick(Sender: TObject);
begin
(Sender as TMenuItem).Checked := True;
end;
Oder verwenden Sie Aktionen, mit ihnen scheint dies wie erwartet zu funktionieren.
Andere Tipps
Sie können den folgenden OnClick-Handler auf alle Ihre Menüpunkte für Radiogruppen einstellen:
procedure TForm1.MenuItemClickHandler(Sender: TObject);
begin
if Sender is TMenuItem then
begin
if not (Sender as TMenuItem).Checked then (Sender as TMenuItem).Checked:=True;
end;
end;