关于‘动态创建窗体’问题
各位大侠:
我的程序思路是:
  Frm_DM.Q_tree2.SQL.Add('select *  from h_code_tree where meno=:meno');
  Frm_DM.Q_tree2.ParamByName('meno').AsString:=ListView1.Selected.Caption;
  Frm_DM.Q_tree2.Open;
  FormName:=Frm_DM.Q_tree2.FieldByName('name').AsString;
  MyComponent:=Application.FindComponent(FormName);
  Formmeno:=Frm_DM.MenuName(FormName);
  if (MyComponent Is TForm) then
  begin
    MyForm:=TForm(MyComponent).Create(Application);
    MyForm.ShowModal;
  end
  else
  begin
    //MyForm:=TForm(MyComponent).Create(Application);
    //MyForm:=TForm.Create(Application);
    //MyForm.Name:=FormName;
    MyForm.ShowModal;
  end;
问题是打开窗体时报错!select name  from h_code_tree  的结果如下:
Frm_sysparm                                                                              
Frm_ruku                                          
Frm_chuku  等等!请问怎么解决                                       

解决方案 »

  1.   

    关于‘动态创建窗体’问题
    各位大侠:
    我的程序思路是:
      Frm_DM.Q_tree2.SQL.Add('select *  from h_code_tree where meno=:meno');
      Frm_DM.Q_tree2.ParamByName('meno').AsString:=ListView1.Selected.Caption;
      Frm_DM.Q_tree2.Open;
      FormName:=Frm_DM.Q_tree2.FieldByName('name').AsString;
      MyComponent:=Application.FindComponent(FormName);
      Formmeno:=Frm_DM.MenuName(FormName);
      if (MyComponent Is TForm) then
      begin
        MyForm:=TForm(MyComponent).Create(Application);
        MyForm.ShowModal;
      end
      else
      begin
        //MyForm:=TForm(MyComponent).Create(Application);
        //MyForm:=TForm.Create(Application);
        //MyForm.Name:=FormName;
        MyForm.ShowModal;
      end;
    问题是打开窗体时报错!select name  from h_code_tree  的结果如下:
    Frm_sysparm                                                                              
    Frm_ruku                                          
    Frm_chuku  等等!请问怎么解决                                       
      

  2.   

    关于‘动态创建窗体’问题
    各位大侠:
    我的程序思路是:
      Frm_DM.Q_tree2.SQL.Add('select *  from h_code_tree where meno=:meno');
      Frm_DM.Q_tree2.ParamByName('meno').AsString:=ListView1.Selected.Caption;
      Frm_DM.Q_tree2.Open;
      FormName:=Frm_DM.Q_tree2.FieldByName('name').AsString;
      MyComponent:=Application.FindComponent(FormName);
      Formmeno:=Frm_DM.MenuName(FormName);
      if (MyComponent Is TForm) then
      begin
        MyForm:=TForm(MyComponent).Create(Application);
        MyForm.ShowModal;
      end
      else
      begin
        //MyForm:=TForm(MyComponent).Create(Application);
        //MyForm:=TForm.Create(Application);
        //MyForm.Name:=FormName;
        MyForm.ShowModal;
      end;
    问题是打开窗体时报错!select name  from h_code_tree  的结果如下:
    Frm_sysparm                                                                              
    Frm_ruku                                          
    Frm_chuku  等等!请问怎么解决  怎么没有人 来解决??????????????????????????
      

  3.   

    关于‘动态创建窗体’问题
    各位大侠:
    我的程序思路是:
      Frm_DM.Q_tree2.SQL.Add('select *  from h_code_tree where meno=:meno');
      Frm_DM.Q_tree2.ParamByName('meno').AsString:=ListView1.Selected.Caption;
      Frm_DM.Q_tree2.Open;
      FormName:=Frm_DM.Q_tree2.FieldByName('name').AsString;
      MyComponent:=Application.FindComponent(FormName);
      Formmeno:=Frm_DM.MenuName(FormName);
      if (MyComponent Is TForm) then
      begin
        MyForm:=TForm(MyComponent).Create(Application);
        MyForm.ShowModal;
      end
      else
      begin
        //MyForm:=TForm(MyComponent).Create(Application);
        //MyForm:=TForm.Create(Application);
        //MyForm.Name:=FormName;
        MyForm.ShowModal;
      end;
    问题是打开窗体时报错!select name  from h_code_tree  的结果如下:
    Frm_sysparm                                                                              
    Frm_ruku                                          
    Frm_chuku  等等!请问怎么解决  怎么没有人 来解决??????????????????????????
      

  4.   

    逻辑有点乱。 MyComponent:=Application.FindComponent(FormName);
    你调试一下,这个MyComponent是不是返回nil?
      

  5.   

    MyComponent:=Application.FindComponent(FormName);
    返回值不是 NIL,怎么办
      

  6.   

    你在主程序台看看,即progarmme程序中,看是否你创建的窗体顺序出问题了,
      

  7.   

    报什么错?
    应这样:try
            ....
            finnally
             myfrom.free;
            end;
      

  8.   

    一:我的autu_create forms  只有  三个frm_login,frm_dm,frm_dm;而available forms  很多如frm_ruku /frm_chuku  等等!
    我在frm_main中用
    Frm_DM.Q_tree2.SQL.Add('select *  from h_code_tree where meno=:meno');
      Frm_DM.Q_tree2.ParamByName('meno').AsString:=ListView1.Selected.Caption;
      Frm_DM.Q_tree2.Open;
      FormName:=Frm_DM.Q_tree2.FieldByName('name').AsString;
      MyComponent:=Application.FindComponent(FormName);
      Formmeno:=Frm_DM.MenuName(FormName);
      if (MyComponent Is TForm) then
      begin
        try
          MyForm:=TForm(MyComponent);
          //MyForm:=TForm(MyComponent).Create(Application);
          MyForm.ShowModal;
          Frm_DM.AddLog(Frm_login.p_username,Formmeno,Now);
        finally
          //MyForm.free;
          MyForm:=Nil;
        end;
      end
      else
      begin
        try
          //MyForm:=TForm(MyComponent).Create(Application);
          MyForm:=TForm.Create(nil);
          //MyForm:=TForm(MyComponent);
          //MyForm.Name:=FormName;
          MyForm.ShowModal;
        finally
          MyForm.free;
          MyForm:=Nil;
        end;
      end;时,报错!一:我的autu_create forms  只有  三个frm_login,frm_dm,frm_dm;而available forms  很多如frm_ruku /frm_chuku  等等!
    我在frm_main中用
    Frm_DM.Q_tree2.SQL.Add('select *  from h_code_tree where meno=:meno');
      Frm_DM.Q_tree2.ParamByName('meno').AsString:=ListView1.Selected.Caption;
      Frm_DM.Q_tree2.Open;
      FormName:=Frm_DM.Q_tree2.FieldByName('name').AsString;
      MyComponent:=Application.FindComponent(FormName);
      Formmeno:=Frm_DM.MenuName(FormName);
      if (MyComponent Is TForm) then
      begin
        try
          MyForm:=TForm(MyComponent);
          //MyForm:=TForm(MyComponent).Create(Application);
          MyForm.ShowModal;
          Frm_DM.AddLog(Frm_login.p_username,Formmeno,Now);
        finally
          //MyForm.free;
          MyForm:=Nil;
        end;
      end
      else
      begin
        try
          //MyForm:=TForm(MyComponent).Create(Application);
          MyForm:=TForm.Create(nil);
          //MyForm:=TForm(MyComponent);
          //MyForm.Name:=FormName;
          MyForm.ShowModal;
        finally
          MyForm.free;
          MyForm:=Nil;
        end;
      end;时,报错!一:我的autu_create forms  只有  三个frm_login,frm_dm,frm_dm;而available forms  很多如frm_ruku /frm_chuku  等等!
    我在frm_main中用
    Frm_DM.Q_tree2.SQL.Add('select *  from h_code_tree where meno=:meno');
      Frm_DM.Q_tree2.ParamByName('meno').AsString:=ListView1.Selected.Caption;
      Frm_DM.Q_tree2.Open;
      FormName:=Frm_DM.Q_tree2.FieldByName('name').AsString;
      MyComponent:=Application.FindComponent(FormName);
      Formmeno:=Frm_DM.MenuName(FormName);
      if (MyComponent Is TForm) then
      begin
        try
          MyForm:=TForm(MyComponent);
          //MyForm:=TForm(MyComponent).Create(Application);
          MyForm.ShowModal;
          Frm_DM.AddLog(Frm_login.p_username,Formmeno,Now);
        finally
          //MyForm.free;
          MyForm:=Nil;
        end;
      end
      else
      begin
        try
          //MyForm:=TForm(MyComponent).Create(Application);
          MyForm:=TForm.Create(nil);
          //MyForm:=TForm(MyComponent);
          //MyForm.Name:=FormName;
          MyForm.ShowModal;
        finally
          MyForm.free;
          MyForm:=Nil;
        end;
      end;时,报错!
      

  9.   

    二:我的 forms  全是  autu_create forms 时,同样的程序,运行正常!请问怎么解决呢,我想用动态 创建窗体!
      

  10.   

    一:我的autu_create forms  只有  三个frm_login,frm_dm,frm_dm;而available forms  很多如frm_ruku /frm_chuku  等等!
    我在frm_main中用
    Frm_DM.Q_tree2.SQL.Add('select *  from h_code_tree where meno=:meno');
      Frm_DM.Q_tree2.ParamByName('meno').AsString:=ListView1.Selected.Caption;
      Frm_DM.Q_tree2.Open;
      FormName:=Frm_DM.Q_tree2.FieldByName('name').AsString;
      MyComponent:=Application.FindComponent(FormName);
      Formmeno:=Frm_DM.MenuName(FormName);
      if (MyComponent Is TForm) then
      begin
        try
          MyForm:=TForm(MyComponent);
          //MyForm:=TForm(MyComponent).Create(Application);
          MyForm.ShowModal;
          Frm_DM.AddLog(Frm_login.p_username,Formmeno,Now);
        finally
          //MyForm.free;
          MyForm:=Nil;
        end;
      end
      else
      begin
        try
          //MyForm:=TForm(MyComponent).Create(Application);
          MyForm:=TForm.Create(nil);
          //MyForm:=TForm(MyComponent);
          //MyForm.Name:=FormName;
          MyForm.ShowModal;
        finally
          MyForm.free;
          MyForm:=Nil;
        end;
      end;时,报错!二:我的 forms  全是  autu_create forms 时,同样的程序,运行正常!请问怎么解决呢,我想用动态 创建窗体!
      

  11.   

    是不是没有设置好父主form啊?
      

  12.   

    一:我的autu_create forms  只有  三个frm_login,frm_dm,frm_dm;而available forms  很多如frm_ruku /frm_chuku  等等!程序如下:
    if (MyComponent Is TForm) then
      begin
        try
          MyForm:=TForm(MyComponent);
          //MyForm:=TForm(MyComponent).Create(Application);
          MyForm.ShowModal;
          Frm_DM.AddLog(Frm_login.p_username,Formmeno,Now);
        finally
          //MyForm.free;
          MyForm:=Nil;
        end;
      end
      else
      begin
        try
          //MyForm:=TForm(MyComponent).Create(Application);
          MyForm:=TForm.Create(nil);
          //MyForm:=TForm(MyComponent);
          //MyForm.Name:=FormName;
          MyForm.ShowModal;
        finally
          MyForm.free;
          MyForm:=Nil;
        end;
      end;时,报错!二:我的 forms  全是  autu_create forms 时,同样的程序,运行正常!请问怎么解决呢,我想用动态 创建窗体!