唉,初學者就是心累,對于大神們來說很簡單的問題,我這里一卡就是一天。還是登錄界面的值傳遞到另一個表單的問題,要把Form1里面的帳號和權限傳遞到Form3表單(Form2是模塊類),請問如何實作?
我查過書,也百度過,方法就是在Form1中定義一個記錄,在Form1的uses中加入Unit3,在Form3中的uses中加入Unit1,然后
Form3.show后,在Form3表單中呼叫出來。代碼如下,有勞各位大神費心了!
Form1代碼:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
UserInfo = record
UserName: string;
UserPassword:string;
UserRole:string;
end;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Auser:UserInfo;
end;
var
Form1: TForm1;
ActionCD:string;
implementation
uses Unit3, Unit2;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if(Trim(Edit1.Text)='') then
begin
showMessage('請輸入帳號');
Edit1.SetFocus();
exit;
end;
if(Trim(Edit2.Text)='') then
begin
showMessage('請輸入密碼');
Edit2.SetFocus();
exit;
end;
with DataModule2.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from users where UserName=:a and Password=:b'); //查找帳號密碼
Parameters.ParamByName('a').Value:=Edit1.Text;
Parameters.ParamByName('b').Value:=Edit2.Text;
Open;
if RecordCount=1 then
begin
showMessage('登錄成功!');
{ showMessage('你的帳號是:'+FieldByName('username').AsString +
'你的密碼是:'+FieldByName('password').AsString +
'你的權限是:'+FieldByName('role').AsString);
UserInfo:=TUserInfo.Create;
UserInfo.UserName:= FieldByName('username').AsString;
UserInfo.UserPassword:=FieldByName('password').AsString;
UserInfo.UserRole:=FieldByName('role').AsString;
}
Auser.UserName:= FieldByName('username').AsString;
Auser.UserPassword:= FieldByName('password').AsString;
Auser.UserRole:= FieldByName('role').AsString;
showMessage(Auser.UserRole);
Form3.Show;
end
else
// showMessage('帳號或密碼錯誤,請重新輸入!');
MessageBox(handle,'用戶名或密碼有誤,請重試!','非法用戶',MB_ICONSTOP+mb_ok);
Edit1.Text:='';
Edit2.Text:='';
exit;
end;
end;
end.
Form3(傳遞變數的結果):
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
uses Unit1,Unit2;
procedure TForm3.FormCreate(Sender: TObject);
begin
Label1.Caption:='你的帳號是:'+ Form1.Auser.UserName;
end;
end.
結果就是顯示不出來,我查了好久沒發現問題,請教一下各位大神,如何實作?謝謝了!
uj5u.com熱心網友回復:
TForm3類增加一個SetUserName的公共方法和FUserName這樣的成員procedure TForm3::SetUserName(username: string)
begin
FUserName = username;
end;
創建了物件之后,呼叫一下方法,就可以傳過去了, 之后訪問FUserName。
uj5u.com熱心網友回復:
還是不太懂,能舉個例子嗎?uj5u.com熱心網友回復:
讀書是硬道理,如此問題,讓人無法下手。表單間,變數交換,可以通過:
1、USES加入對方單元解決。
2、雙方共用全域變數。
3、通過指定單元的變更或事件,如 Form1.Button
uj5u.com熱心網友回復:
真的不會,能提供一個簡單的例檔案嗎?uj5u.com熱心網友回復:
參考另一個FORM,可以直接傳的啊uj5u.com熱心網友回復:
我覺得你不能放在procedure TForm3.FormCreate(Sender: TObject);中,創建中找不到變數,狀態不對,而是應該放在procedure TForm3.FormActivate(Sender: TObject);中,表單創建后可以找到變數,你試一試。uj5u.com熱心網友回復:
當然,放在procedure TForm3.FormShow(Sender: TObject);中也是可以的,哈哈uj5u.com熱心網友回復:
增加一個 Global.pas 單元檔案,把傳遞資訊放這里(interface 里的 var),然后 Unit1,Unit2,Unit3 的implementation里都 uses Global.pasuj5u.com熱心網友回復:
Form3中寫個全域函式用來傳傳值,Form1中呼叫即可uj5u.com熱心網友回復:
通常專案中,建立一個全域變數檔案、全域常量檔案、共用函式檔案,把這些共用的都分別歸總處理,其他需要的地方參考檔案直接使用就可以的。uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
這樣做比較清楚。
也可以直接指向某Unit的Public變數,就是需要清除這些變數在哪,參考的時候需要指向而已
uj5u.com熱心網友回復:
樓主是如何測驗成功了呢?問題出在哪里了?和大家分享一下吧?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/46056.html
標籤:數據庫相關
