Form參數的傳遞,仍然無解 |
答題得分者是:danny
|
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
抱歉,試了好久,雖然參考了以下的討論
.問題】如何做到編號自動累加?
.~~急~~兩個表單函數的傳遞??
.更新資料後將游標保持在此筆位置
.同時show幾個form
仍然不得其解,是否能指導如下: 我有兩個Form,一個是Form1,一個是Form2
Form1用DBGrid列出所有會員資料,俟使用點選後,按修改按鈕
開啟Form2的畫面 (Form2為基本資料的修改) 這個是我在Form1按下「修改」時的內容
procedure TForm1.SpeedButton6Click(Sender: TObject);
var
Emp_No: String; begin
Emp_No := ADOTable1.FieldByName('A0').AsString;
Label1.Caption:=Emp_No;
Form2.FormStyle:=fsMDIChild;
Form2.Show;
Form2.Caption := '個人院訊';
Form2.WindowState:=wsMaximized;
end; 但是Form2郤讀不到傳過來的參數
procedure TForm2.FormCreate(Sender: TObject);
begin
ADOTable1.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=CCPM_ODBC';
ADOTable1.Active:=True;
Label5.Caption:=Emp_No;
end; 是否有那位先進能指導一下,謝謝!
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
在你 post 出來的程式碼中完全沒做傳遞的動作丫... 你的 Form2 是何時 Create 的? 是一開始便先 Create 了嗎 ? 你試試 :
procedure TForm1.SpeedButton6Click(Sender: TObject);
var
Emp_No: String; begin
Emp_No := ADOTable1.FieldByName('A0').AsString;
Label1.Caption:=Emp_No;
Form2.Label5.Caption := Emp_No;
Form2.FormStyle:=fsMDIChild;
Form2.Show;
Form2.Caption := '個人院訊';
Form2.WindowState:=wsMaximized;
end;
|
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 抱歉,試了好久,雖然參考了以下的討論 .問題】如何做到編號自動累加? .~~急~~兩個表單函數的傳遞?? .更新資料後將游標保持在此筆位置 .同時show幾個form 仍然不得其解,是否能指導如下: 我有兩個Form,一個是Form1,一個是Form2 Form1用DBGrid列出所有會員資料,俟使用點選後,按修改按鈕 開啟Form2的畫面 (Form2為基本資料的修改) 這個是我在Form1按下「修改」時的內容 procedure TForm1.SpeedButton6Click(Sender: TObject); var Emp_No: String; begin Emp_No := ADOTable1.FieldByName('A0').AsString; Label1.Caption:=Emp_No; Form2.FormStyle:=fsMDIChild; Form2.Show; Form2.Caption := '個人院訊'; Form2.WindowState:=wsMaximized; end; 但是Form2郤讀不到傳過來的參數 procedure TForm2.FormCreate(Sender: TObject); begin ADOTable1.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=CCPM_ODBC'; ADOTable1.Active:=True; Label5.Caption:=Emp_No; end;因為您跟本沒傳參數給Form2啊! 請改成這樣: procedure TForm1.SpeedButton6Click(Sender: TObject); var Emp_No: String; begin Emp_No := ADOTable1.FieldByName('A0').AsString; Label1.Caption:=Emp_No; Form2.FormStyle:=fsMDIChild; Form2.Caption := '個人院訊'; Form2.Label5.Caption := Emp_No; Form2.WindowState:=wsMaximized; Form2.Show; end;不過以上寫法並不好, 最好作成如下給 Form1 呼叫: Form2 ... 略 ... public procedure SetDataValue(Emp_No: String); ... 略 ... procedure TForm2.SetDataValue(Emp_No: String); begin Label5.Caption := Emp_No; end; Form1 procedure TForm1.SpeedButton6Click(Sender: TObject); var Emp_No: String; begin Emp_No := ADOTable1.FieldByName('A0').AsString; Label1.Caption:=Emp_No; Form2.FormStyle:=fsMDIChild; Form2.Caption := '個人院訊'; Form2.SetDataValue(Emp_No) Form2.WindowState:=wsMaximized; Form2.Show; end;
------
將問題盡快結案也是一種禮貌! |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
Hi, 你可以將你想要傳遞的變數宣告在 form2 的 public 段..
這樣一來就可以將資料存入 form2 中.. 在 form2 的程式中就可以使用了.
如:
TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } Emp_No: string; end;然後就可以使用這樣的語法來進行給定的參數: procedure TForm1.SpeedButton6Click(Sender: TObject); var Emp_No: String; begin Emp_No := ADOTable1.FieldByName('A0').AsString; Label1.Caption:=Emp_No; Form2.Emp_No:=Emp_No; Form2.FormStyle:=fsMDIChild; Form2.Show; Form2.Caption := '個人院訊'; Form2.WindowState:=wsMaximized; end; |
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
|
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 問題已經解決了,沒想到那麼簡單,原來我想的太複雜了 但對於以下程式不太了解,是要放在那裡,他的意思是??是否能寫完整點? Form2 ... 略 ... public procedure SetDataValue(Emp_No: String); ... 略 ... procedure TForm2.SetDataValue(Emp_No: String); begin Label5.Caption := Emp_No; end;這是在 Form2 宣告一個傳送參數的 procedure 給其他的 Form 用. 這樣作的原因是保持物件導向設計的完整性; 像 timhuang 兄所說的方法是最簡單的, 但也破壞了物件導向設計原則, 但將他改成如下是很好的設計 Form2 ... 略 ... private FEmp_No, FEmp_Code: String; public property Emp_No: String read FEmp_No write FEmp_No; property Emp_Code: String read FEmp_Code write FEmp_Code; .....這樣就要傳多少參數給 Form2 都可以
------
將問題盡快結案也是一種禮貌! |
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
|
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
雖然結案了, 但仍有問題, 麻煩各位先進指導一下 這是當使用者按下「修改」按鈕,開呑MDI視窗Form2的內容, 執行沒有問題
procedure TForm1.SpeedButton6Click(Sender: TObject);
var
Emp_No: String;
begin
Emp_No := ADOTable1.FieldByName('A0').AsString;
Label1.Caption:=Emp_No;
Form2.FormStyle:=fsMDIChild;
Form2.Show;
Form2.ADOTable1.Active:=True;
Form2.Caption := '個人院訊修改';
Form2.WindowState:=wsMaximized;
Form2.Label5.Caption:=Emp_No;
Form2.ADOTable1.Locate('A0',Emp_No,[]);
end; 這是查詢姓名按鍵內容 procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
if Edit1.text <> '' then //有輸入
begin
ADOQuery1.Active := false;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('SELECT * FROM pm3d WHERE A2 LIKE ' #39 '%' Edit1.Text '%' #39);
ADOQuery1.Active := true;
ADOQuery1.close;
ADOQuery1.Open;
Label3.Caption:=IntToStr(ADOQuery1.RecordCount);
DataSource1.DataSet :=ADOQuery1;
DBGrid1.DataSource := DataSource1;
if ADOQuery1.isEmpty then // 沒有資料
ShowMessage('查無此姓名');
end
else
ShowMessage('您沒有輸入資料');
end; 請問我如何把查到列在DBGrid1上的那一筆資料, 經由「修改」按鈕 Emp_No 變數傳給Form2 ??
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |