procedure TForm1.N14Click(Sender: TObject);begin
     form20:=tform20.Create(nil);     try
         form20.ShowModal;
     finally
        form20.Free;
     end;
end;procedure TForm1.N15Click(Sender: TObject);begin      form21:=tform21.Create(nil);     try
         form21.ShowModal;
     finally
          form21.Free;
     end;
 我单击  N14  能单出form20 而单击  N15 却不能单出 form21 是什么原因呢?(是不是我在 form21 少写了什么东西
谢谢!

解决方案 »

  1.   

    begin
          form21:=Tform.Create(nil);     try
             form21.ShowModal;
         finally
              form21.Free;
    end;
      

  2.   

    procedure TForm1.FormClick(Sender: TObject);
    begin
        form3:=Tform3.Create(nil);
      try
        form3.Showmodal;
      finally
        form3.free;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      form2:=Tform2.Create(nil);
      try
        form2.Showmodal;
      finally
        form2.free;
      end;
    end;
    可以呀!我家了三个窗体试了,你是不是少了一个end;
      

  3.   

    如果没报错,先试试
    procedure TForm1.N15Click(Sender: TObject);
    begin
      showmessage('This is N15Click');
    {
      form21:=Tform21.Create(nil);
      try
        form21.ShowModal;
      finally
        form21.Free;
      end;
    }
    end;
      

  4.   

    From21 有可能不被被模态,比如是子窗体,Visible=TRue,等
    如果不是再看其它问题,你试一下在N15Click中写Form20。ShowMadol
    如果没问题就是FORm21的问题
      

  5.   

    非常感谢各位大哥,没有错误提示,还有,当我单击了 N15Click ,则form1 的 关闭按钮都不起作用了.
    我觉得问题应该是 在form21上因为
    procedure TForm1.N15Click(Sender: TObject);begin      form20:=tform20.Create(nil);     try
             form20.ShowModal;
         finally
              form20.Free;
         end;却可以还需请教各位大哥的是:怎么跟踪和断点调试啊?谢谢 各位大哥!
      

  6.   

    可以给你个检查的方法
    把N14Click和N15Click中的代码相交换一下
    看看结果怎样
    如果问题变成了N14没法实现
    就是下面的窗口创建显示有问题了
      

  7.   

    谢谢各位老大:
    from21 的代码是:(由于代码比较多,所以贴了一部分,真的非常感谢各位大哥的热心)
    unit Unit21;interface  uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, ExtCtrls, ImgList, ToolWin, DB, ADODB;type
      TForm21 = class(TForm)
        ToolBar1: TToolBar;
        ToolButton1: TToolButton;
        ToolButton2: TToolButton;
        ToolButton3: TToolButton;
        ToolButton4: TToolButton;
        ToolButton5: TToolButton;
        ToolButton6: TToolButton;
        ToolButton7: TToolButton;
        ImageList1: TImageList;
        ImageList2: TImageList;
        Splitter1: TSplitter;
        Splitter2: TSplitter;
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        TreeView1: TTreeView;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Edit1: TEdit;
        Edit2: TEdit;
        DateTimePicker1: TDateTimePicker;
        Memo1: TMemo;
        RadioButton1: TRadioButton;
        RadioButton2: TRadioButton;
        RadioButton3: TRadioButton;
        Button1: TButton;
        ADOStoredProc1: TADOStoredProc;
        TreeView2: TTreeView;
        Label5: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        Label11: TLabel;
        Label12: TLabel;
        Label13: TLabel;
        Label14: TLabel;
        Label15: TLabel;
        Label16: TLabel;
        Label17: TLabel;
        DateTimePicker2: TDateTimePicker;
        DateTimePicker3: TDateTimePicker;
        Bevel1: TBevel;
        Edit3: TEdit;
        Edit4: TEdit;
        ComboBox1: TComboBox;
        Edit5: TEdit;
        ComboBox2: TComboBox;
        ComboBox3: TComboBox;
        DateTimePicker4: TDateTimePicker;
        Edit6: TEdit;
        Label6: TLabel;
        Memo2: TMemo;
        RadioButton4: TRadioButton;
        RadioButton5: TRadioButton;
        RadioButton6: TRadioButton;
        Button2: TButton;
        Button3: TButton;
        Label18: TLabel;
        GroupBox1: TGroupBox;
        RadioButton7: TRadioButton;
        RadioButton8: TRadioButton;
        ADOStoredProc2: TADOStoredProc;
        procedure RadioButton1Click(Sender: TObject);
        procedure RadioButton2Click(Sender: TObject);
        procedure RadioButton3Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure TreeView1Click(Sender: TObject);
        procedure ToolButton1Click(Sender: TObject);
        procedure ToolButton2Click(Sender: TObject);
        procedure ToolButton3Click(Sender: TObject);
        procedure ToolButton4Click(Sender: TObject);
        procedure Edit1KeyPress(Sender: TObject; var Key: Char);
        procedure Edit3KeyPress(Sender: TObject; var Key: Char);
        procedure ComboBox1Change(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure TreeView2Click(Sender: TObject);
        procedure RadioButton4Click(Sender: TObject);
        procedure RadioButton5Click(Sender: TObject);
        procedure RadioButton6Click(Sender: TObject);
        procedure ToolButton5Click(Sender: TObject);
        procedure ToolButton6Click(Sender: TObject);
        procedure ToolButton7Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
     
       // procedure TreeView1Click(Sender: TObject);
      private
        { Private declarations }
      public  procedure fshowtreeview1(departmentid:string;ParentNode:TTreeNode);  procedure fshowtreeview2(departmentid:string;ParentNode:TTreeNode);  procedure fshowtreeview2_2(departmentid:string;ParentNode:TTreeNode);    { Public declarations }  end;
      

  8.   

    //////////////////////////定义 treeview2(类型结构  )
    type
    pdlbstoredtypemyrecord=^tpdlbstoredtypemyrecord;
    tpdlbstoredtypemyrecord=record
    parentid:string;
    nodeid:string;
    lsqgamedlbstoredid:string;
    end;
    //////////////////////////定义 treeview2(类型结构  )//////////////////////////定义 treeview1(类型结构  )type
    pdlbtypemyrecord=^tdlbptypemyrecord;
    tdlbptypemyrecord=record
    parentid:string;
    nodeid:string;
    end;
    //////////////////////////定义 treeview1(类型结构  )
    var
      Form21: TForm21;implementationuses
         unit1;{$R *.dfm}//////////////////////////////////////////////////////初始化 treeview1
    procedure tform21.fshowtreeview1(departmentid:string;ParentNode:TTreeNode);var
           
           ppdlbtypemyrecord:pdlbtypemyrecord;
           TN:TTreeNode;
           ADOStoredP:TADOStoredProc;
           //departmentparentname:string;
           lsqgamedlbtypename:string;begin        aDOStoredP:=TADOStoredProc.Create(nil);
            aDOStoredP.Connection:=form1.ADOConnection1;
            aDOStoredP.Close;
            aDOStoredP.ProcedureName:='lsqprocselect_lsqgamedlbtypetable_all';
            aDOStoredP.Parameters.Refresh;
           // aDOStoredP.Parameters.ParamByName('@departmentparentname').Value:=departmentid;
            aDOStoredP.Prepared:=true;
            aDOStoredP.Open;
            aDOStoredP.First;       while not  aDOStoredP.Eof do
                 begin
                       Application.ProcessMessages;
                       lsqgamedlbtypename:=aDOStoredP.fieldbyname('lsqgamedlbtypename').AsString;                   new(ppdlbtypemyrecord);
                       ppdlbtypemyrecord.nodeid:=adostoredp.fieldbyname('lsqgamedlbtypename').AsString;
                       ppdlbtypemyrecord.parentid:='金龙公司' ;
                       TN:=treeview1.Items.AddChild(ParentNode,adostoredp.fieldbyname('lsqgamedlbtypename').AsString);
                       tn.ImageIndex:=1;
                       tn.Data:=ppdlbtypemyrecord;
                         //dispose(myrecord);
                      // fshowtreeview1(adostoredp.fieldbyname('lsqgameyxjtypename').AsString,tn);  //开始递归                   aDOStoredP.Next;
                   end;
                   
                       aDOStoredP.Free;
    end;
    //////////////////////////////////////////////////////初始化 treeview1procedure TForm21.Button1Click(Sender: TObject);const
         ss:string='金龙公司';
         MyDocDir = 'd:\zhohuiping';var
        i:integer;
        lsqgamedlbtypefirsttime:string;//////////////////////////////////////////////// 初始化 treeview1
         bootnodetreeview1:ttreenode;
         P : PString;
         ppdlbtypemyrecord:pdlbtypemyrecord;
    //////////////////////////////////////////////// 初始化 treeview1begin
          i:=length(trim(edit1.Text));      if   i<>4  then
               begin
                     showmessage('附件编号必须为 4 位数字');
                     exit;
               end;          lsqgamedlbtypefirsttime:=formatdatetime('YYYY-MM-DD hh:mm:ss:zzz',DateTimePicker1.DateTime);          if    RadioButton1.Checked   then                if    messagedlg('您确定新增此记录吗',mtconfirmation,[mbyes,mbno],0)=mryes then                       begin
                                 ADOStoredProc1.Close;
                                 ADOStoredProc1.ProcedureName:='lsqprocinsert_lsqgamedlbtypetable';
                                 ADOStoredProc1.Parameters.Refresh;                             ADOStoredProc1.Parameters.ParamByName('@lsqgamedlbtypeid').Value:=trimleft(edit1.Text);
                                 ADOStoredProc1.Parameters.ParamByName('@lsqgamedlbtypename').Value:=trimleft(edit2.Text);
                                 ADOStoredProc1.Parameters.ParamByName('@lsqgamedlbtypefirsttime').Value:=strtodatetime(lsqgamedlbtypefirsttime);
                                 ADOStoredProc1.Parameters.ParamByName('@lsqgamedlbtypebz').Value:=memo1.Text;                             try
                                     ADOStoredProc1.ExecProc;
                                     showmessage('新增记录成功');
                                 except
                                     showmessage('新增记录不成功');
                                 end;
                           /////////////////////////////////////////////////////////// 初始化 treeview1
                                  new(ppdlbtypemyrecord);
                                  ppdlbtypemyrecord.parentid:='';
                                  ppdlbtypemyrecord.nodeid:='金龙公司';
                                  Treeview1.Items.Clear;
                                  Treeview1.Items.BeginUpdate;
                                  New(P);
                                  P^:= MyDocDir ;
                                  bootnodetreeview1:= Treeview1.Items.AddObject(Nil, ss, P);
                                  bootnodetreeview1.Data:=ppdlbtypemyrecord;
                                  treeview1.Items.EndUpdate;
                                //dispose(myrecord);
                                  fshowtreeview1(ss,bootnodetreeview1);                       /////////////////////////////////////////////////////////////    初始化 treeview1
                            end
                        else
                             exit; end;
     procedure TForm21.FormCreate(Sender: TObject); const
         ss:string='金龙公司';
         MyDocDir = 'd:\zhohuiping'; var     i:integer;//////////////  添加条目用的//////////////////////////////////////////////////////////////////////初始化 treeview 1
         bootnodetreeview1:ttreenode;
         P : PString;
         ppdlbtypemyrecord:pdlbtypemyrecord;//////////////////////////////////////////////////////////////////////初始化 treeview 1
    begin     
    //////////////////////////////////////////////////////////////////////初始化 treeview 1
          new(ppdlbtypemyrecord);
         ppdlbtypemyrecord.parentid:='';
         ppdlbtypemyrecord.nodeid:='金龙公司';
         Treeview1.Items.Clear;
         Treeview1.Items.BeginUpdate;
         New(P);
         P^:= MyDocDir ;
         bootnodetreeview1:= Treeview1.Items.AddObject(Nil, ss, P);
         bootnodetreeview1.Data:=ppdlbtypemyrecord;
         treeview1.Items.EndUpdate;
         //dispose(myrecord);
         fshowtreeview1(ss,bootnodetreeview1);
    //////////////////////////////////////////////////////////////////////初始化 treeview 
    谢谢!
      

  9.   

    检查From21是不是自动创建,
    在use里引用From21的单元。
      

  10.   

    各位大哥:
    又有新发现,我把 form21 里的代码都清除了,只留下:
    unit Unit21;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm21 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form21: TForm21;implementation{$R *.dfm}end.
    当我执行:
    procedure TForm1.N15Click(Sender: TObject);begin      form21:=tform21.Create(nil);     try
             form21.ShowModal;
         finally
              form21.Free;
         end;出现的错误是:project projiect1.exe exception class Einvalidoperation  with 
                 message  'cannot make a visible window modal'请教,各位大哥,是不是 form21 我有哪个属性设置错误了?还是?谢谢!
      

  11.   

    不然你新建一个form31试试,应该没问题,再把form21从工程移掉
      

  12.   

    谢谢:
    我想把 from21 这个单元都不要了
    我要删除那些东西呢?
    假如 我的 工程保存在 c:\bcak 里面
    那么我 需要删除那些东西呢?
    谢谢!
      

  13.   

    你不一定要去掉Form21这种问题应该是你的Form21 是子窗体,子窗体的Visible属性无法被设为False,也无法Modal如果将你的Form21改为普通窗体,将Visible 设为False,应即可模态之后也不会在任务栏中显示,因为在同一个进程中
    在Form21的Create 事件中不要写 Form21.Show 等句子,也不要写Form21.Visible:=true;改之前可以测试一下,可将N15Click中的Form21.Showmodal改为Form21.Show,如果没有问题,则就试上面的方法
      

  14.   

    From21 有可能不被被模态,比如是子窗体,Visible=TRue,等
    如果不是再看其它问题,你试一下在N15Click中写Form20。ShowMadol
    如果没问题就是FORm21的问题 steelxu5(人间漫步)  早早就说过了
      

  15.   

    谢谢各位老大
    1:在 N15Click中写Form20。ShowMadol 是可以的
    2:form21 的 formstyle  为 fsnormal 
    3:procedure TForm1.N15Click(Sender: TObject);
       begin
            form21.show;
        end;当运行 TForm1.N15Click 时出现的错误是:
    projiect project1.exe raised exception class Eaclessviolation with message
    'access violation at address 0047f386 in module 'project.exe'请各位大哥再给我看看~~
    谢谢!
      

  16.   

    这个错误应是没有对象,一是Form21中的Create事件中引用了某个未创建的对象
    二是运时时,Form21没有被创建如果Form21中没有问题,应是Form21
    没有创建
    检查一下你的Form21在那里创建的
    或者在N15Click 中 加上
    if assigned(Form21) then
       Form21:=TForm21.create(self);
      Form21.show;
      

  17.   

    上面打错了,不好意思,应是 if not (assigned(Form21)) then