動態create並且使用function取得傳回值 |
尚未結案
|
fantasy
一般會員 ![]() ![]() 發表:10 回覆:9 積分:3 註冊:2003-11-27 發送簡訊給我 |
各位大哥你們好
我知道傳回值有很多人討論,我看了很多的範例也試了很多的example,
不過我好像找不到跟我同樣的問題
問題如下
小妹我想把 Form A 的 edit1 的值傳給 CREATE 的 Form B 然後 Form B
的 FAvalue接著Form B 就秀出來,等使用者輸入Form B 後按確定
就關了Form B,然後Form A 的edit2便得到 Form B 把 FAvalue + 使用者
輸入的值,我試著在FormA的 Button1Click 把 Form B CREATE 出來,但
是不知道什麼時候知道Form B的使用者關了Form B , 希望前輩能指教
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Edit2: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type TForm2 = class(TForm) Edit1: TEdit; Button1: TButton; private { Private declarations } public { Public declarations } FAvalue:Integer; function rtnval(ia:integer):Integer; end; |
shinjie
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:12 回覆:275 積分:287 註冊:2003-03-19 發送簡訊給我 |
因為不是很清楚問題,所以寫得不是很好。
type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; procedure Button1Click(Sender: TObject); private public end; var Form1: TForm1; implementation uses Unit2; procedure TForm1.Button1Click(Sender: TObject); begin try if Application.FindComponent('Form2')=nil then Application.CreateForm(TForm2, Form2); Form2.FAvalue:=StrToInt(Edit1.Text); if Form2.ShowModal = Mrok then begin Edit2.Text:=intToStr(Form2.rtnval()); end; Finally Form2.Free; end; end; type TForm2 = class(TForm) Button1: TButton; private { Private declarations } public FAvalue:Integer; function rtnval():Integer; //只要回傳值,傳入的值要做啥??? end; var Form2: TForm2; implementation { TForm2 } function TForm2.rtnval(): Integer; begin Result:=FAvalue; //自已加上B輸入的值 end;Form2的Button要設定ModalResult為Mrok ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始 發表人 - shinjie 於 2005/10/12 08:20:48
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。 得之;我幸。不得;我命。 |
fantasy
一般會員 ![]() ![]() 發表:10 回覆:9 積分:3 註冊:2003-11-27 發送簡訊給我 |
|
shinjie
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:12 回覆:275 積分:287 註冊:2003-03-19 發送簡訊給我 |
引言: 謝謝 shinjie前輩 熱心的幫我解答, 試過在SDI可以執行,但是在 MDI 使用 ShowModal 會丟出一個例外出來,例外原因如下 "EInvlid Operation with message Cannot make a visible widow modal' 使用SHOW的話就Create 完就直接 Free,想請問一下 有沒有辦法解決呢?使用SHOW的話就Create 完就直接 Free 這個是try..Finally的問題,把他拿掉就好了。 在 MDI 是不能使用 ShowModal的,所以要改變方式。 在FormA的public設一個function,然後在FormB關畢之前,將值set 回FormA。 type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Edit2: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public function setedit(str:string):Boolean; end; var Form1: TForm1; implementation uses Unit2; function TForm1.setedit(str: string): Boolean; begin Edit2.Text:=str; end; procedure TForm1.Button1Click(Sender: TObject); begin if Application.FindComponent('Form2')=nil then Application.CreateForm(TForm2, Form2); Form2.FAvalue:=StrToInt(Edit1.Text); Form2.Show; end; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public FAvalue:Integer; end; var Form2: TForm2; implementation uses Unit1; procedure TForm2.Button1Click(Sender: TObject); begin Form1.setedit(inttostr(FAvalue)); Form2.Close; end;========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。 得之;我幸。不得;我命。 |
cxh17895
初階會員 ![]() ![]() 發表:13 回覆:37 積分:25 註冊:2003-03-19 發送簡訊給我 |
你參考一下,這是我的寫法
且應該不限於mdi 與sdi的限制...就是呼叫輔助視窗啦..
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Edit2: TEdit; procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); begin edit1.Clear; edit2.Clear; edit1.Text := '我是edit1' ; end; procedure TForm1.Button1Click(Sender: TObject); begin edit2.Text := Form2.ReutenValue(edit1.Text); end; end. //------- unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Edit1: TEdit; Button1: TButton; procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } FormBValue :String; //建一個私值 public { Public declarations } function ReutenValue(VinSTring: String): String; //建一個可供其他unit呼叫的function end; var Form2: TForm2; implementation {$R *.dfm} function TForm2.ReutenValue(VinSTring:String):String ; var newForm : TForm2; begin newForm := TForm2.Create(nil); //重態建立FORM Try newform.FormBValue := VinSTring; //把傳入直放入newFrom中的值 newForm.ShowModal; Finally Result := newform.FormBValue; //回傳 newForm.Free; end; end; procedure TForm2.FormShow(Sender: TObject); begin edit1.Text := FormBValue; end; procedure TForm2.Button1Click(Sender: TObject); begin FormBValue := edit1.Text; // 更新fromBValue close; end; end. |
fantasy
一般會員 ![]() ![]() 發表:10 回覆:9 積分:3 註冊:2003-11-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |