读书人

从bpl调用的MDI表单关闭后,为何在MDIm

发布时间: 2012-02-22 19:36:55 作者: rapoo

从bpl调用的MDI表单关闭后,为何在MDImainform的MDICHILD中还保留着?
建立一个主MDI表单,一个菜单,一些按钮,点击按钮会从一个BPL包中打开MDI子表单,同时会将打开的表单标题添加到菜单中动态菜单项中,这些功能都已完成,最后一步,当子表单关闭时,要将此表单标题从动态菜单中删除掉,我用以下方法,却无法实现:

在主表单的ONACTIVE事件中,添加以下过程:
var
mainmenu:tmainmenu;
i:integer;
formname:shortstring;
begin
mainmenu:= tmainmenu(Parent.FindComponent( 'mainmenu1 '));
for i:=0 to mainmenu.Items[mainmenu.Items.Count-1].Count-1 do
//动态菜单是最后一个菜单栏
begin
formname:=mainmenu.Items[mainmenu.Items.Count-1].Items[i].hint;
//子表单的名字放在菜单项的hint中
if tform(application.FindComponent(formname))=nil then
begin
mainmenu.Items[mainmenu.Items.Count-1].Delete(i);
exit;
end;
end;
end;

在子表单的close事件中,已加了以下代码:
action:=cafree;
self:=nil;

然而application.FindComponent(formname)却不是nil,究竟是哪里出了问题呢?

请高手教教吧.

[解决办法]
可以在MDI表单的WINDOWMENU设置一个菜单栏即可实现你所说的功能,何必那么麻烦!

另,注意你所设置的windowmenu菜单项下必须有一个菜单项才能启动这个菜单栏.

读书人网 >.NET

热点推荐