问个简单的问题MainMenu

tjj5203 2009-11-17 04:22:19
子菜单选择的时候前面打钩,而且一次只能选择一个子菜单!
是那个属性呢?
...全文
135 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wooden954 2009-11-17
  • 打赏
  • 举报
回复
给你邮箱发了一个Demo,看看吧!别忘结帖哟!
tjj5203 2009-11-17
  • 打赏
  • 举报
回复
感谢wooden954和jiap723
谢谢wooden954的代码,我又学到了很多呵呵
我重新建个菜单就好了。。。。。。。
风之谷 2009-11-17
  • 打赏
  • 举报
回复
这样子, autocheck:=True;
RadioItems:=True;
然后根据radio后的items来标记
wooden954 2009-11-17
  • 打赏
  • 举报
回复
忘记说明了:上面的代码也是要求这些子菜单共享同一个过程的。
tjj5203 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ok1411 的回复:]
是不是要把 AutoCheck 先设置为true啊?
多试试就好了
[/Quote]
我这里也不行,不知道为什么,可能是我哪里的设置有问题了
wooden954 2009-11-17
  • 打赏
  • 举报
回复
“一次只能选择一个子菜单”这一项可以这样做:将需要的子菜单的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;

风之谷 2009-11-17
  • 打赏
  • 举报
回复
不用设置autochecked;
ok1411 2009-11-17
  • 打赏
  • 举报
回复
是不是要把 AutoCheck 先设置为true啊?
多试试就好了
tjj5203 2009-11-17
  • 打赏
  • 举报
回复
哪位大哥发个DEMO给我就很简单的就行,tjj811@163.com谢谢了
风之谷 2009-11-17
  • 打赏
  • 举报
回复
应该不会吧
tjj5203 2009-11-17
  • 打赏
  • 举报
回复
procedure TCanMainForm.PCI9810Click(Sender: TObject);
begin
PCI9810.Checked:=True;
end;
为什么我这样无效呢,是不是对子菜单的宽度有要求啊
bdmh 2009-11-17
  • 打赏
  • 举报
回复
Checked打钩,每次一个,那得你自己去写代码
wooden954 2009-11-17
  • 打赏
  • 举报
回复
菜单项是否打勾,是Checked属性,Checked=True为打勾状态,Checked=False为取消状态

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧