線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2137
推到 Plurk!
推到 Facebook!

請問如何更改目前Form2的同時,背景的Form1資料也跟著修改show出

答題得分者是:syntax
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-27 09:50:31 IP:220.132.xxx.xxx 訂閱
我有兩個form,分別form1及form2
form1有個按鈕產生fomr2
<textarea class="delphi" rows="10" cols="60" name="code">procedure TForm1.Button1Click(Sender: TObject); var a: TForm2; begin a:= TForm2.Create(Form1); try a.ShowModal; finally showdata(); a.Free; end; end;</textarea>
然後在form2操作變更時(一個按鈕變更某一變數值),此時form1的顯示資訊也會跟著修改,此時form1還是在背景,而form2還是在最上層。請問要如何做到。我在form2的按按鈕傳回modalresult=mrok;但是這時form2就會被關掉。還是我要用show,但是我不知道如何只是在背景form1顯示就好。
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-27 10:34:56 IP:211.22.xxx.xxx 未訂閱
Form2上面的Button值如果設定了ModalResult值(不管是 mrOK或者是 mrCancel)內定就是按鍵後傳回Button的ModalResult值後將視窗關閉。所以你要兩個視窗在Form2上按鍵後又同時存在,就不能將Form2上的Button設定ModalResult值(要設定為mrNone),其後依照個別按鍵事件後的結果與操作Form1互動,另外關閉視窗的動作也要自己利用System menu上面的 Close或自訂Button的按鍵事件來Close。
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-27 10:58:49 IP:210.68.xxx.xxx 訂閱
嗯,不過不設後,我要如何互動設計
<textarea class="delphi" rows="10" cols="60" name="code">procedure TForm1.Button2Click(Sender: TObject); var a: TForm3; begin a:= TForm3.Create(Form1); try a.Showmodal; if control_change=2 then begin showdata(); control_change:=1; end; //a.ShowData; //ShowData(); finally showdata(); a.Free; end; end; </textarea>
我用個全域變數,但好像不行,在這裡沒有動作,沒有執行序在跑的樣子,不太知道要如何來互動
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-27 11:07:20 IP:211.22.xxx.xxx 未訂閱
例如可在Form1的Class public的部分宣告並定義一個函數,提供Form2來呼叫,該函數作的事情就是依照Form2傳回的值來改變Form1的內容。另外可自行想像發揮一下。
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-27 11:48:04 IP:60.250.xxx.xxx 訂閱
Form1 <textarea class="delphi" rows="10" cols="60" name="code">public procedure ShowData1(s:string); procedure TForm1.ShowData1(s:string); begin label1.caption:=s; end; </textarea> Form2 <textarea class="delphi" rows="10" cols="60" name="code">procedure TForm3.Button3Click(Sender: TObject); begin00 form1.showdata1('zzzzzz'); end; </textarea> 錯誤訊息 access violation at adress 00692A13 in module 'project1.exe' 不行,也還是不太知道如何來改。
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-08-27 11:51:27 IP:211.22.xxx.xxx 未訂閱
方便把整個CODE打包傳上來嗎?小弟來研究看看~請不要有Third party 元件,那我無法開啟了。
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-08-27 11:56:29 IP:220.132.xxx.xxx 訂閱
因為主程式有連到資料庫,我隨意先打包一個範例
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-08-27 12:36:59 IP:61.64.xxx.xxx 訂閱
建議你修改你的設計邏輯
除非有必要,不然兩 From 有相依性,卻又可以各自運作,甚至關閉,處理起來,會複雜許多,徒增工作量

建議改成 3 個 Unit,一個放 Form1,一個放 Form2,另一個放所有必須共用的東西,然後由 Form 1 與 2 來呼叫
除非你有特殊的需求,非用循環參照不可


===================引 用 17kobe 文 章===================
我有兩個form,分別form1及form2
form1有個按鈕產生fomr2
<textarea name="code" cols="60" rows="10" class="delphi">procedure TForm1.Button1Click(Sender: TObject); var a: TForm2; begin a:= TForm2.Create(Form1); try a.ShowModal; finally showdata(); a.Free; end; end;</textarea>
然後在form2操作變更時(一個按鈕變更某一變數值),此時form1的顯示資訊也會跟著修改,此時form1還是在背景,而form2還是在最上層。請問要如何做到。我在form2的按按鈕傳回modalresult=mrok;但是這時form2就會被關掉。還是我要用show,但是我不知道如何只是在背景form1顯示就好。
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-08-27 13:15:41 IP:220.132.xxx.xxx 訂閱
剛剛寫範例程式 結果可以 
我是在form1全域變數寫
var
tt:string;

//按鈕動作
procedure TForm1.Button1Click(Sender: TObject);
var
a: TForm2;
begin
a:= TForm2.Create(Form1);
try
a.ShowModal;
finally
a.Free;
end;
end;

//form2
procedure TForm2.Button1Click(Sender: TObject);
begin
tt:='修改資料庫資料';
form1.show_data;
end;
這樣就行了

但是我實際tt是抓資料庫資料,當form2按鈕按下去 去執行form1下列指令就錯了
if not SQLOpenOK(ADOQuery1,'SELECT groupid,size FROM sysfiles') then
ShowMessage('Query ERROR!!');
有點懷疑是不能去使用ADOQuery1,我把ADOQuery加到全域變數這樣也不行。
ps : SQLOpenOK已經是全域變數。

系統時間:2024-04-25 19:37:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!