delphi不同窗体的变量传递大家好,我想做一个权限控制的程序,要做的效果如下:
在form1中有用户名(nameedit.text)和密码(snedit.text),加一个登入按钮(loginbtn),在form2中有更新按钮(updatebtn)和查询(selectbtn)form1-----------当 用户名(nameedit.text)=abc   -------
   密码(snedit.text)=abc   -------------
则form1登入成功,form1不显示,form2显示出来
-----------------form2------------
当 form1的用户名(nameedit.text)=abc时,form2的更新按钮(updatebtn)自动隐藏.
-----------------
form1源程序:unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    nameedit: TEdit;
    snedit: TEdit;
    loginbtn: TButton;
    procedure loginbtnClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.loginbtnClick(Sender: TObject);
begin
if (nameedit.Text='abc') and (snedit.Text='abc') then
form1.Hide;
form2.show;
end;end.
form2源程序:unit Unit2;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm2 = class(TForm)
    updatebtn: TButton;
    selectbtn: TButton;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form2: TForm2;implementationuses Unit1;{$R *.dfm}procedure TForm2.FormCreate(Sender: TObject);
begin
if form1.nameedit.Text='abc' then
updatebtn.Visible:=false;end;procedure TForm2.Button1Click(Sender: TObject);
begin
if form1.nameedit.Text='abc' then
//if edit1.text='abc' then
updatebtn.Visible:=false;
end;end如form2的代码所示,应该在FormCreate时会执行updatebtn.Visible:=false,但是在form1登放成功后,form2的窗体的更新按钮(updatebtn)依然会显示.
但是如果按下Button1按钮时,更新按钮(updatebtn)却会自动隐藏.现在发现的问题是:不同窗体的变量传递时,在
procedure TForm2.FormCreate(Sender: TObject);-------执行失败
procedure TForm2.Button1Click(Sender: TObject);-----执行成功因为在程序打开时就必须要自动的云检查一下该用户是否有权限去作更新或者查询的动作,如果要每打开一个程序然后点Button1按钮检查一下是否有权限,这样的程序相信不会有人去用的。有那个有兴趣的大侠请指点一下,如果有更好的办法请把源代码一起帖上来,谢谢!
随便说一下,我用的是7.0的版本。

解决方案 »

  1.   

    把那个判断if   (nameedit.Text='abc')   and   (snedit.Text='abc')写进formshow里试试?
      

  2.   

    试了好像不行,谁留email给我,我把源程序发邮件过去。
      

  3.   

    这么做就是不对的 “delphi不同窗体的变量传递”,你可以定义一个公共单元!
      

  4.   

    哎,LZ的窗体设计很有问题啊,你怎么可以将窗体隐藏呢?这样不是就把你的MAIN FORM隐藏了,你的程序也就再也没有办法正常关闭了。我想你先看下别人的例子比较好,你需要学习怎么做登陆窗体。其实应该这样,在PROJECT.PAS中,找到CREATE FROM这条语句,然后在它前面将你的登陆窗体先CREATE出来,完成登陆窗体的CREATE后,判断登陆是否成功,如果成功,则将登陆窗体中的FORM MODELRESULT 变成MROK,然后执行判断,IF FORM1.MODELRESULT = MROK THEN 将程序的主窗体显示出来,并在主窗体中的全局变量赋值。那么,也就将此变量永久的保留下来了,因为DELPHI默认主窗体被关闭,则整个程序结束,也就是说,只要主窗体不关闭,则此变量可以永久的被调用。另外告诉你变量怎么定义。你需要在主窗体中,PUBLIC下定义你的变量,这样才能被其他的窗体引用。而不是隐藏一个窗体,然后去调用它上面的那些控件的属性。这样你的程序做出来,会被人笑死的,到处是内存泄露。窗体之间的参数传递基本为创建一个窗体,将原窗体中的变量赋值给新窗体的全局变量,而你正好相反。
    with form2.create(application) do
    begin
      ssss := form1.aaa.text //ssss为FROM2的PUBLIC变量
      showmodel; //SHOW出窗体
      if modelresult = mrok then
      begin
        free;
      end;
    end;
    大致是这样一个代码,我这里没有环境,否则就帮你搞定了,哎,学DELPHI的时候,看着例子学习会比较快些
      

  5.   

    感谢9楼的建议,说真的学delphi要找到好的例子还真不容易,对着书本觉得像嚼蜡一样,看看书不用10分钟准能睡着,再次感谢各位的回答,能认识大家真好!
      

  6.   

    首先感谢4楼的zxf_feng和5楼的jerry8在最短时间内帮我解决问题,在此说声:谢谢!下面为解决问题的form1的源代码:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        name: string;
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      form2: Tform2;
    begin
      name := tRIM(EDIT1.Text);
      if (Trim(edit1.Text) = 'abc') and (Trim(edit2.Text) = 'abc') then
      begin
        form1.Hide;
        form2 := Tform2.Create(Application);
        form2.show;
      end;
    end;end.