“一次只能选择一个子菜单”这一项可以这样做:将需要的子菜单的GroupIndex设置为同一个非0值,并且将这些子菜单的RadioItem全部设置为True,这样将这些子菜单的OnClick事件这样写: begin (Sender as TMenuItem).Checked:=true; end; 就可以选择一项,并且其它选项自动取消。但是综合起楼主的另外一个要求“子菜单选择的时候前面打钩”,这就不好办了:打勾属性是Checked,它对于相同组的菜单无效,而“一次只能选择一个子菜单”是RadioItem属性,它表现在界面上是菜单前面有个小圆点,而不是√。所以楼主的综合要求是直接通过设置属性实现不了的,如果要实现,只能通过代码实现:(前提是这些菜单设置RadioItem属性为False,并且设置GroupIndex属性为不为零的同一值) var Idx:Integer; i:integer; begin //记录本菜单的分组值 Idx:=(Sender as TMenuItem).GroupIndex; //取消同组的其它菜单项的选择状态 for i:=0 to MainMenu1.Items.Count-1 do begin if ((MainMenu1.Items[i].GroupIndex=Idx) and (MainMenu1.Items[i]<> (Sender as TMenuItem))) then begin MainMenu1.Items[i].Checked:=False; end; end; //将用户点击的菜单打勾 (Sender as TMenuItem).Checked:=True;
begin
PCI9810.Checked:=True;
end;
为什么我这样无效呢,是不是对子菜单的宽度有要求啊
多试试就好了
begin
(Sender as TMenuItem).Checked:=true;
end;
就可以选择一项,并且其它选项自动取消。但是综合起楼主的另外一个要求“子菜单选择的时候前面打钩”,这就不好办了:打勾属性是Checked,它对于相同组的菜单无效,而“一次只能选择一个子菜单”是RadioItem属性,它表现在界面上是菜单前面有个小圆点,而不是√。所以楼主的综合要求是直接通过设置属性实现不了的,如果要实现,只能通过代码实现:(前提是这些菜单设置RadioItem属性为False,并且设置GroupIndex属性为不为零的同一值)
var
Idx:Integer;
i:integer;
begin
//记录本菜单的分组值
Idx:=(Sender as TMenuItem).GroupIndex;
//取消同组的其它菜单项的选择状态
for i:=0 to MainMenu1.Items.Count-1 do
begin
if ((MainMenu1.Items[i].GroupIndex=Idx) and
(MainMenu1.Items[i]<> (Sender as TMenuItem))) then
begin
MainMenu1.Items[i].Checked:=False;
end;
end;
//将用户点击的菜单打勾
(Sender as TMenuItem).Checked:=True;
RadioItems:=True;
然后根据radio后的items来标记
谢谢wooden954的代码,我又学到了很多呵呵
我重新建个菜单就好了。