原代码如下:
procedure FormToPanel(a_header,a_rzpanel: TRZpanel; a_formClass: TFormClass);
var
  NewDemoClass: TFormClass;
  NewDemo: TForm;
  iCount:integer;
begin
  while FormList.Count > 1 do
  begin
    if Assigned(FormList.Objects[0]) then
      FormList.Objects[0].Free;
    FormList.Delete(0);
  end;
  NewDemoClass := a_formClass;
  if (a_rzpanel.ControlCount = 0) or not (a_rzpanel.Controls[0] is NewDemoClass) then
  begin
    if Assigned(NewDemoClass) then
    begin
      NewDemo := NewDemoClass.Create(nil);
      NewDemo.Hide;
      NewDemo.WindowState:=wsMaximized;
      NewDemo.BorderStyle := bsNone;
      NewDemo.Align:= alClient;
      a_header.Caption:='当前功能>>'+NewDemo.Caption;
      NewDemo.Align :=alTop;
      NewDemo.Dock(a_rzpanel,a_rzpanel.ClientRect);  
      NewDemo.Show;
      FormList.AddObject('',NewDemo);
    end;
  end;
end;
但在使用的时候,出现一个很奇怪的问题:
有些窗体在菜单上点击一次就能正常显示,而有些窗体必须点击两次才能显示。
我对比过这些窗体,窗体的所有属性都是一样的,为什么会出现这种情况呢?麻烦哪位高人帮一下

解决方案 »

  1.   

    我也发现自己做的panel里的窗体要点一下才能显示里面treeview的数据,顶一下
      

  2.   

    NewDemo := NewDemoClass.Create(nil); // 把这个修改成Panel试试看
    NewDemo.Parent:= Pandle;没有指定父窗体,父窗体Paint的时候,没有通知子窗体刷新。
      

  3.   

    我用的是DOCK方式,没有采用parent的方式。
    但为什么有的窗体就好用,有的窗体就不好用呢?
    而且我还发现:
    同一个窗体,原来是好用的,我对的几个控件进行了修改后,就不好用了。
    我再重新建立一个窗体,然后把原来不好用的窗体中的内容全部拷贝到新窗体中,就又好用了。这是怎么回事呢?
      

  4.   

    我用的是DOCK方式,没有采用parent的方式。
    但为什么有的窗体就好用,有的窗体就不好用呢?
    而且我还发现:
    同一个窗体,原来是好用的,我对的几个控件进行了修改后,就不好用了。
    我再重新建立一个窗体,然后把原来不好用的窗体中的内容全部拷贝到新窗体中,就又好用了。这是怎么回事呢?