TPopupメニューの少なくとも1項目が常に選択されていることを確認する
-
12-12-2019 - |
質問
次のプロパティで3項目設定を備えたTPOPUPメニューを持っています。
AutoCheck = True
RadioItem = True
.
および最初のメニュー項目の場合、Checked
プロパティをTrue
に設定しても、メニューが最初に選択されている少なくとも1つの項目が表示されます。これはすべて良いものでもよく、現在選択されているアイテムをクリックすると、チェック(ドット)が消えて、ポップアップ内の少なくとも1つの項目が常に選択されるようにしたいと思います。どうやって行くのですか?
解決
グループ内の項目には、同じゼロ以外の GroupIndex
。これは、 RadioItem
アイテムをラジオのように振る舞うようにする必要があります。グループ。
しかし、 AutoCheck
現在チェックされている項目をクリックすると、チェックをクリアするため、GroupIndex
およびRadioItem
プロパティ。
(おそらく、これはVCLのバグと見なすことができます。)
これは回避策です:
AutoCheck
からFalse
に設定し、同じゼロ以外のGroupIndex
とCommon OnClick
ハンドラをすべて割り当ててこのようにクリックされたアイテムをチェックします。
procedure TForm1.ItemClick(Sender: TObject);
begin
(Sender as TMenuItem).Checked := True;
end;
.
または actions を使用すると、これは予想通り動作しているようです。 >
他のヒント
すべてのラジオグループメニュー項目に次のonClickハンドラを設定できます。
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;
. 所属していません StackOverflow