我有TPopup菜单,其中3项设置具有以下属性。
AutoCheck = True
RadioItem = True
并且对于第一个菜单项我将Checked
属性设置为True
,因此菜单最初显示时至少选择了1个项目。这一切都很好,但是如果我点击当前选中的项目,则检查(点)消失,我想做到这一点,以便始终选择弹出窗口中的至少1个项目。我该怎么做呢?
答案 0 :(得分:8)
组中的项目也应该具有相同的非零GroupIndex
。这与RadioItem
一起使项目的行为就像一个广播组。
但是,AutoCheck
似乎不尊重GroupIndex
和RadioItem
属性,因为当您点击当前选中的项目时,它会清除检查。
(可以说,这可能被认为是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;