1
我有一个poup菜单,我有两个无线电项目。TPoupMenu无线电项目uncheched当点击相同的项目
procedure MySelector.CreatePopup;
begin
FGroupingMenu := TPopupMenu.Create(Self);
FGroupingMenu.Name := 'FGroupingMenu';
FGroupingMenu.OnPopup := GroupingMenuItemPopup;
FmnuNameGroup := TMenuItem.Create(Self);
FmnuNameGroup.Name := 'mnuNameGroup';
FmnuNameGroup.AutoCheck := True;
FmnuNameGroup.Caption := '&Name Group';
FmnuNameGroup.RadioItem := True;
FmnuNameGroup.OnClick := GroupingMenuItemClick;
FGroupingMenu.Items.Add(FmnuNameGroup);
FmnuAge := TMenuItem.Create(Self);
FmnuAge .Name := 'mnuAge';
FmnuAge .AutoCheck := True;
FmnuAge .Caption := '&Age Group';
FmnuAge .RadioItem := True;
FmnuAge .OnClick := GroupingMenuItemClick;
FGroupingMenu.Items.Add(FmnuAge);
end;
而且OnClick事件是
procedure MySelector.GroupingMenuItemClick(Sender: TObject);
begin
if FmnuNameGroup.Checked then
grp:= sgName
else if FmnuAge .Checked then
grp := sgAge
else
Assert(False, 'MySelector.GroupingMenuItemClick: Unknown MenuItem');
end;
的问题是,如果集团被选中,如果我再次点击同一项目,OnClick事件被称为和名称组现在成为选择,而因为没有最初的名字该项目被检查它正在崩溃。
是否有反正,以防止菜单项取消选中,如果我再次选择所选项目或有任何方法检查onclick发件人是否已被选定的项目?
另一种解决方案我认为是让自动检查错误,并有OnClick事件处理程序像下面
procedure MySelector.GroupingMenuItemClick(Sender: TObject);
var
mnuItem : TMenuItem;
begin
mnuItem := sender as TMenuItem;
if mnuItem.Name = 'mnuNameGroup' then
begin
grp:= sgName
FmnuNameGroup.Checked := true;
end
else if mnuItem.Name = 'mnuAge' then
begin
grp := sgAge
FmnuAge.Checked := true;
end
else
Assert(False, 'MySelector.GroupingMenuItemClick: Unknown MenuItem');
end;
这是一个正确的做法?
不,你必须像你一样手动进行。菜单项的行为不像收音机组,也不像工具按钮那样具有可以设置为False的AllowAllUp。 –