1
두 개의 라디오 항목이있는 전화기 메뉴가 있습니다.TPoupMenu 동일한 항목을 클릭하는 동안 라디오 항목이 선택 취소되었습니다.
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 이벤트는 처음에 그룹을 선택하고 내가 다시 같은 항목을 클릭하면 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;
입니다 항목의 충돌이 확인되었습니다.
내가 선택한 항목을 다시 선택하거나 보낸 사람이 이미 항목을 선택했는지 여부를 확인할 수있는 방법이없는 경우 메뉴 항목이 선택 취소되지 않도록 하시겠습니까?
내가 생각했던 또 다른 해결책은 자동 검사가 false하고
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;
이것이 올바른 접근 방식인가 아래와 같이 OnClick 이벤트 핸들러를 가지고있다?
아니요, 수동으로 수행해야합니다. 메뉴 항목은 라디오 그룹처럼 행동하지 않으며 AllowAllUp이있는 도구 버튼도 False로 설정할 수 없습니다. –