2

次のプロパティで3つの項目が設定されたTPopupメニューがあります。

AutoCheck = True
RadioItem = True

最初のメニュー項目についても、Checkedプロパティをに設定しTrueて、メニューに少なくとも1つの項目が選択され、最初に表示されるようにしました。これはすべて問題ありませんが、現在選択されている項目をクリックすると、チェック(ドット)が消え、ポップアップ内の少なくとも1つの項目が常に選択されるようにしたいと思います。どうすればそれを行うことができますか?

4

2 に答える 2

9

グループ内のアイテムも同じゼロ以外のものである必要がありますGroupIndex。これと合わせてRadioItem、アイテムをラジオグループのように動作させる必要があります。

ただし、現在チェックされている項目をクリックするとチェックがクリアされるため、プロパティを尊重してAutoCheckいないようです。(おそらく、これはVCLのバグと見なされる可能性があります。)GroupIndexRadioItem

回避策は次のとおりです。

に設定AutoCheckFalse、すべてのアイテムにゼロ以外の同じ非ゼロGroupIndexと共通のOnClickハンドラーを割り当てて、次のようにクリックされたアイテムをチェックします。

procedure TForm1.ItemClick(Sender: TObject);
begin
  (Sender as TMenuItem).Checked := True;
end;

または、アクションを使用します。アクションを使用すると、これは期待どおりに機能するようです。

于 2012-07-27T05:59:05.187 に答える
0

次の 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;
于 2012-07-27T06:24:28.787 に答える