2

我有带有以下属性的 3 个项目设置的 TPopup 菜单。

AutoCheck = True
RadioItem = True

对于第一个菜单项,我也将Checked属性设置True为,以便菜单至少选择了一个项目,并且最初显示它。这一切都很好,但是如果我单击当前选择的项目,检查(点)就会消失,我想这样做,以便始终选择弹出窗口中的至少 1 个项目。我该怎么做呢?

4

2 回答 2

9

组中的项目也应该具有相同的非零GroupIndex。这与RadioItem应该使项目表现得像一个无线电组。

但是,它似乎AutoCheck不尊重GroupIndexRadioItem属性,因为当您单击当前选中的项目时它会清除检查。(可以说,这可能被认为是 VCL 中的一个错误。)

这是一个解决方法:

设置AutoCheckFalse,为所有项目分配相同的非零值GroupIndex和一个公共OnClick处理程序来检查单击的项目,如下所示:

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

或使用Actions,与他们一起这似乎按预期工作。

于 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 回答