我使用的是BusinessSkinForm第三方控件,
我想实现动态增加菜单,包括主菜单和子菜单,经过多次实现发现
如果已经静态添加好主菜单(也就是第一集菜单)后,再动态用代码增加子菜单是没有问题的,
但是如果代码动态增加主菜单,怎么增加都不显示出来,我的代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
 mi:TMenuItem;
begin
  mi:= TMenuItem.Create(self);
  mi.Name:='test';
  mi.Caption:='测试主菜单';
  mi.Visible:=true;
 
  bsSkinMainMenu1.Items.Add(mi);//这样动态增加主菜单后显示不了;  //如果已经静态增加过主菜单,那么加入子菜单的代码可以类似如下写,并可以正常显示
  //bsSkinMainMenu1.Items.items[0].Add(mi);
end;控件的设置关系我都已经设置好,否则也就不会显示子菜单了,我的理解所以希望有使用过此控件的高手指点:bsSkinMainMenu如何动态增加主菜单项?

解决方案 »

  1.   

    很简单,在完成菜单的构造后,如是改变的是顶级菜单,应在你的函数中加入下列语句:
         bskMenuBar.MainMenu:=nil;                   
         bskMenuBar.MainMenu:= bsSkinMainMenu1;
    bskMenuBar 应该替换了你的TbsSkinMenuBar的实际变量名。估计是控件所提供的初始化操作在你的函数执行前就完成了,你的函数改变了顶层菜单,那就应该重新进行指针赋值,以刷新菜单显示。