比如说:有个EDIT1框,有个Button1
         功能:输入Edit1 ='f_frm'时
              我一点Button1  就打开了 名字为f_frm的窗体
             当输入EDit2 ='f_frm2'
              我一点Button1  就打开了 名字为f_frm2的窗体
请问:这个Button1的代码怎么写?http://expert.csdn.net/Expert/topic/2432/2432431.xml?temp=.1808435
下面是其中一个办法
var
  dd:tcomponent;
begin
  dd:=application.FindComponent(trim(edit1.Text));
  if application.FindComponent(trim(edit1.Text))<>nil then
  begin
    tform(dd).show;
  end;这种办法的确可以解决。但我发现要是我的窗体都不是自动创建的,所以打开时都要
application.create(Tfrm);
frm.show;
这样的话是不是不好办呀?有解吗?而且application.FindComponent(trim(edit1.Text))都会=nil
(因为窗体都不是自动创建的project->options->Forms页选项里)

解决方案 »

  1.   

    无他解,
    可以修改application.create();为tfrm.create(nil);
    思路一样.
    如果你不创建,怎么能show呢?
      

  2.   

    不好弄呀。不过可以在edit输入窗体的类型,如Tform1.
      

  3.   

    我的窗体都不是自动创建的!procedure TfrmMain.BtnCreateClick(Sender: TObject);
    var
      frm: TForm;
    begin
      if frm = nil then
        frm := TYou_Have_Named_From.Create(Self);
      frm.Show;
    end;
      

  4.   

    比如说:有个EDIT1框,有个Button1
             功能:输入Edit1 ='f_frm'时
                  我一点Button1  就打开了 名字为f_frm的窗体
                 当输入EDit2 ='f_frm2'
                  我一点Button1  就打开了 名字为f_frm2的窗体
    请问:这个Button1的代码怎么写?(注我的窗体都不是自动创建)楼上的理解了吗?如果成了,一定大分相送诸位
      

  5.   

    對不起,我的理解也許不達你本意。
    我是這樣理解的:
        你在新建工程時有設計好'f_frm' 與'f_frm2'
        只是你通過Project\Options把它們從自動創建列表中移除了。
        procedure TfrmMain.BtnCreateClick(Sender: TObject);
        var
          frm: TForm;
        begin
          if frm = nil then
            frm := Tf_frm.Create(Self);
          frm.Show;
        end;不過,現在看來你的意思是:
        我一点Button1  就創建并顯示出一個名字为f_frm的窗
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    MyFrm : Tform;
    begin
      if edit1.Text <> '' then
      begin
        MyFrm := Tform1.Create(self);
        MyFrm.Caption := edit1.Text;
        MyFrm.Show;
      end;
    end;
    测试了一下达到要求
    如果没达到大概是我没理解
      

  7.   

    谢谢大家!
    to:swayi21(微斯人)     "我是這樣理解的:
             你在新建工程時有設計好'f_frm' 與'f_frm2'
            只是你通過Project\Options把它們從自動創建列表中移除了。"这种理解是对的,我的窗体的确是设计好的。只是在创建列表中移除了.大家再帮我看看是否有解乎!
      

  8.   

    比如说:有个EDIT1框,有个Button1
             功能:输入Edit1 ='f_frm'时
                  我一点Button1  就打开了 名字为f_frm的窗体
                 当输入EDit2 ='f_frm2'
                  我一点Button1  就打开了 名字为f_frm2的窗体
    请问:这个Button1的代码怎么写?(注我的窗体都不是自动创建)前提:我想打开的窗体是已经存在的。我写的很难理解吗????
      

  9.   

    implementation{$R *.DFM}uses
      Unit1, Unit2;var
      frm: TForm;procedure TfrmMain.btnCreateClick(Sender: TObject);
    begin
      if Edit1.Text = 'f_frm' then
        if frm = nil then
          frm := Tf_frm.Create(Self);  if Edit1.Text = 'f_frm2' then
        if frm = nil then
          frm := Tf_frm2.Create(Self);  if frm = nil then Exit;  try
        frm.ShowModal;
      finally
        FreeAndNil(frm);
      end;
    end;
      

  10.   

    to:楼上的这个情况下我们不知道f_frm2呀
    只知道 string 类型的 'f_frm2'其实这个问题的实质就是 已知 一个窗体名(string类型) 怎么得到 companentname类型的窗体名称