我有带有以下属性的 3 个项目设置的 TPopup 菜单。
AutoCheck = True
RadioItem = True
对于第一个菜单项,我也将Checked
属性设置True
为,以便菜单至少选择了一个项目,并且最初显示它。这一切都很好,但是如果我单击当前选择的项目,检查(点)就会消失,我想这样做,以便始终选择弹出窗口中的至少 1 个项目。我该怎么做呢?
我有带有以下属性的 3 个项目设置的 TPopup 菜单。
AutoCheck = True
RadioItem = True
对于第一个菜单项,我也将Checked
属性设置True
为,以便菜单至少选择了一个项目,并且最初显示它。这一切都很好,但是如果我单击当前选择的项目,检查(点)就会消失,我想这样做,以便始终选择弹出窗口中的至少 1 个项目。我该怎么做呢?
组中的项目也应该具有相同的非零GroupIndex
。这与RadioItem
应该使项目表现得像一个无线电组。
但是,它似乎AutoCheck
不尊重GroupIndex
和RadioItem
属性,因为当您单击当前选中的项目时它会清除检查。(可以说,这可能被认为是 VCL 中的一个错误。)
这是一个解决方法:
设置AutoCheck
为False
,为所有项目分配相同的非零值GroupIndex
和一个公共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;