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?

Était-ce utile?

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;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top