假设我现在已经又一个窗体Form1我想在程序中创建新的Form2应该怎么做呢?是使用Create()吗?窗体的show 方法和 showmodal 又什么区别呢?我应该怎么区分他们呢?小弟我用DELPHI做了一个简单的登陆窗口,当在EdtID中输入员工号(也就是ADOTable1所连接的表中ID字段)第一条记录还可以,可是如果第一次登陆输入后面的员工号(比如表中的第2条记录,第3条记录)就弹出“不存在该员工号!”敬请高手帮助!
procedure TFormLogin.BtnOKClick(Sender: TObject);
begin
   adotable1.Open;
  if EdtID.Text='' then
  showmessage('请您输入员工号!')
  else   if (EdtID.Text = trim(adotable1.FieldByName('STF_ID').AsString))
     and (EdtPSWD.Text=trim(adotable1.fieldbyname('PWD').AsString)) then
      begin
      if not adotable1.Eof then
        adotable1.Next;
        showmessage('正确的员工号!');
        form2.showmodal;
        EdtID.Text:=trim(adotable1.FieldByName('STF_ID').AsString);
      end
      else
      showmessage('不存在该员工号!');
      EdtID.Text:='';
      EdtPSWD.Text:='';
      EdtID.SetFocus;
end;

解决方案 »

  1.   

    创建窗体一般就用TForm.Create(Application);Show方法显示的窗体是非模式窗体,而ShowModal显示的则是模式窗体,也即必须关闭它后才能进行其他操作!
      

  2.   

    一般的弹出窗口或敬告窗口最好用ShowModal模式了
      

  3.   

    帮你改了下程序,没有测试:
    var i: integer;
    begin
      adotable1.Open;
      if EdtID.Text='' then
        showmessage('请您输入员工号!')
      else
      begin
        adotable1.First;
        for i := 0 to adotable1.RecordCount - 1 do
          if (EdtID.Text = trim(adotable1.FieldByName('STF_ID').AsString))
            and (EdtPSWD.Text=trim(adotable1.fieldbyname('PWD').AsString)) then
          begin
            showmessage('正确的员工号!');
            if assigned(form2) then
            begin
              form2 := Tform2.create(Application); 
              showmodal;
            end
            else
              form2.showmodal;
            EdtID.Text:=trim(adotable1.FieldByName('STF_ID').AsString);
            adotable1.close;
            exit;
          end
          else
          begin
            showmessage('不存在该员工号!');
            EdtID.Text:='';
            EdtPSWD.Text:='';
            EdtID.SetFocus;
            adotable1.Next;
          end;
      end;
    end;
      

  4.   

    assigned(form2)这是什么意思啊?