S'assurer qu'au moins 1 élément d'un menu TPopup est toujours sélectionné
-
12-12-2019 - |
Question
J'ai un menu TPopup avec 3 éléments configurés avec les propriétés suivantes.
AutoCheck = True
RadioItem = True
et pour le premier élément de menu, j'ai défini le Checked
propriété à True
De plus, le menu contient au moins 1 élément sélectionné et il est initialement affiché.Tout cela est bien beau, mais si je clique sur l'élément actuellement sélectionné, la coche (point) disparaît et je veux faire en sorte qu'au moins 1 élément dans la fenêtre contextuelle soit sélectionné à tout moment.Comment dois-je procéder?
La solution
Les éléments du groupe doivent également avoir le même nombre non nul GroupIndex
.Ceci, avec RadioItem
devrait faire en sorte que les éléments se comportent comme un groupe radio.
Cependant, il semble que AutoCheck
ne respecte pas GroupIndex
et RadioItem
propriétés, car cela effacera la vérification lorsque vous cliquerez sur un élément actuellement coché.(On pourrait sans doute considérer cela comme un bug dans la VCL.)
Voici une solution de contournement :
Ensemble AutoCheck
à False
, attribuez à tous les éléments la même valeur non nulle GroupIndex
et un commun OnClick
gestionnaire pour vérifier l'élément cliqué comme ceci :
procedure TForm1.ItemClick(Sender: TObject);
begin
(Sender as TMenuItem).Checked := True;
end;
Ou utiliser Actions, avec eux, cela semble fonctionner comme prévu.
Autres conseils
Vous pouvez définir le gestionnaire d'onclick suivant à tous les éléments de menu de votre groupe de radio:
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;