请教:一个关于递归菜单问题

ribut9225 2006-01-28 01:47:14


小弟初学,想用递归的法,遍历菜单项

菜单名为:m_zu

写递归函数:

AnsiString TForm1::fu_menu(TMenuItem * lpm_mu)
{
AnsiString ls_text;
for(int i=0;i<lpm_mu->count;i++)
{
ls_msg+=lpm_mu->Itme[i]->Caption+";";
if(lpm_mu->Item[i]->Count>0) //如果还有子菜单,则递归调用
{
ls_msg+=fu_menu(lpm_mu->Item[i])+";";
}
}
}

调用时:
AnsiString ls_msg;
TMenuItem * lm_m;
lm_m=m_zu->Items;
ls_msg=fu_menu(lm_m);
ShowMessage(ls_msg);

结果是遍历菜单,可是多了几个空字符串出来
菜单:
综合管理 系统管理
部门 退出
人员

可是报出来的是:
综合管理;部门;人员;;系统管理;退出;;

一共是多了两个;
请那位大侠指点
...全文
150 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ribut9225 2006-01-30
  • 打赏
  • 举报
回复
多谢
果然好用。。。
原来是递归函数返回值里,已有";"号了

结贴
oldtab 2006-01-28
  • 打赏
  • 举报
回复
上面的代码,能在BCB 3下过。高版本可能过不了。还是改回
AnsiString TYRP::fu_menu(TMenuItem * lpm_mu)
{
AnsiString ls_text;
for(int i=0; i<lpm_mu->Count; i++) //count 错成了小写
{
ls_text+=lpm_mu->Items[i]->Caption+";";
if(lpm_mu->Items[i]->Count>0)
{
ls_text+=fu_menu(lpm_mu->Items[i]); //这一句,你多了 +";"
}
}
return ls_text; //你漏了这句
}
oldtab 2006-01-28
  • 打赏
  • 举报
回复
楼主新年好。

AnsiString TYRP::fu_menu(TMenuItem * lpm_mu)
{
AnsiString ls_text;
for(int i=0; i<lpm_mu->Count; i++) //count 错成了小写
if(ls_text+=lpm_mu->Items[i]->Caption+";", lpm_mu->Items[i]->Count>0)
ls_text+=fu_menu(lpm_mu->Items[i]); //这一句,你多了 +";"
return ls_text; //这句不能少
}

604

社区成员

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

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