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。 –