确保始终选择TPopup菜单中的至少一个项目

时间:2012-07-27 04:24:57

标签: delphi popup radio-group

我有TPopup菜单,其中3项设置具有以下属性。

AutoCheck = True
RadioItem = True

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

2 个答案:

答案 0 :(得分:8)

组中的项目也应该具有相同的非零GroupIndex。这与RadioItem一起使项目的行为就像一个广播组。

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

这是一种解决方法:

AutoCheck设置为False,为所有项目分配相同的非零GroupIndex和一个公共OnClick处理程序,以检查所点击的项目:

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

或者使用Actions,它们似乎按预期工作。

答案 1 :(得分: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;