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

如何把值由 form2 傳到 form1 ?

尚未結案
xfile
初階會員


發表:21
回覆:80
積分:25
註冊:2004-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-20 02:43:27 IP:219.80.xxx.xxx 未訂閱
大家好 :) 小弟找了站上的文章,大概是我用的關鍵字有問題,好像找不到我要的答案    我開了 form1(Auto-Create) 和 form2(Available), form1 可以 include form2.h 檔,但 form2 不能 include form1.h ;    form1 只有這些變數 --------------------------------------------------------------
TForm1 *Form1;    int Msg_Form_Count;
-------------------------------------------------------------- form2 只有這些變數 --------------------------------------------------------------
class TForm2 : public TForm
{
__published:        // IDE-managed Components
        TTimer *Timer1;
        void __fastcall Timer1Timer(TObject *Sender);
private:                 // User declarations
public:                // User declarations
        int delta;
        __fastcall TForm2(TComponent* Owner);
};    
在這種條件限制下,有什?方法可以讓 form2 自己去讀 form1 的值 ? form2 可以回傳任何值給 form1 嗎 ? 目前想不到作法的就是當 form2 要 delete 掉時,是由 form1 來控制的 ; 也就是說當 form2 達到 delete 的條件時,由 form2 傳值通知 form1 ,並把程式流程還給 form1,再由 from1 來刪除 form2。 請問各位這個要怎麼做 ? 謝謝
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-20 08:16:34 IP:221.169.xxx.xxx 未訂閱
xfile:
form1 可以 include form2.h 檔,但 form2 不能 include form1.h ;
這本身就有很大的問題,會何form2 不能 include form1.h?
試試看!
Tform2 *form2;
try  {
  form2=new Tform2(Application);
  form2->delta=Msg_Form_Count; //form1值傳給form2
  form2->ShowModal();
  Msg_Form_Count=form2->delta; //form2值傳回form1
  delete form2;
}
catch (...) {
  delete form2;
}
在這種條件限制下,有什麼方法可以讓form2自己去讀form1的值?
form2開啟前先讀form1的值,如上例!
form2 可以回傳任何值給 form1 嗎 ?
如上例,可以!
請參考!
Andy Chang
------
Andy Chang
xfile
初階會員


發表:21
回覆:80
積分:25
註冊:2004-10-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-20 11:08:05 IP:220.130.xxx.xxx 未訂閱
引言:
xfile:
form1 可以 include form2.h 檔,但 form2 不能 include form1.h ;
這本身就有很大的問題,會何form2 不能 include form1.h?    因為這是條件啊,應該沒有元件直接 include "form1.h" 這樣做吧 ?    試試看!    謝謝,我試試 :)     在這種條件限制下,有什麼方法可以讓form2自己去讀form1的值?
form2開啟前先讀form1的值,如上例!
form2 可以回傳任何值給 form1 嗎 ?
如上例,可以!
請參考!
Andy Chang
謝謝,那請問有方法可以把程式流程轉回 form1 嗎 ? 因為form2要做成元件一般,會 new 出很多個來, 所以我很需要在問題中提到的技巧 發表人 - xfile 於 2004/10/20 11:11:01
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-20 11:57:44 IP:221.169.xxx.xxx 未訂閱
引言:
引言:
xfile:
form1 可以 include form2.h 檔,但 form2 不能 include form1.h ;
這本身就有很大的問題,會何form2 不能 include form1.h?    因為這是條件啊,應該沒有元件直接 include "form1.h" 這樣做吧 ?    試試看!    謝謝,我試試 :)     在這種條件限制下,有什麼方法可以讓form2自己去讀form1的值?
form2開啟前先讀form1的值,如上例!
form2 可以回傳任何值給 form1 嗎 ?
如上例,可以!
請參考!
Andy Chang
謝謝,那請問有方法可以把程式流程轉回 form1 嗎 ? 因為form2要做成元件一般,會 new 出很多個來, 所以我很需要在問題中提到的技巧 發表人 - xfile 於 2004/10/20 11:11:01
xfile:你的問題很有意思!但我還是不太懂,請參考一下 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=56341 【問題】請問有關動態產生FORM的參數傳遞問題?? 答題得分者為:andychang1690 可否解決你的問題;form2要做成元件一般,會 new 出很多個來 我建議你也可以朝Frame方式: http://delphi.ktop.com.tw/topic.php?topic_id=43594 【BCB】【發表】同時使用多個 TFrame Instance 發表人:dllee 版主 請參考! Andy Chang
------
Andy Chang
ray24
中階會員


發表:18
回覆:88
積分:56
註冊:2002-07-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-20 12:04:26 IP:220.135.xxx.xxx 未訂閱
插個花... BCB Form 結構是這樣ㄉ 一般會設定一個form 叫 mian Form 程式一開始會以這個Form為第一個開啟給使用者看的form 然後要呼叫其他的form步驟如下 1.include 這個form 的標頭檔 2.使用form 所提共的方法show() or ShowModal() 來顯示其它form 當然你自型 new 出來的動態form 除了解構與建構要自己來外 其它的使用方法與bcb幫你見出來的form是一樣的 另外一提 show() 並不會 Focuse 鎖住Form...所以使用後可以自由的切換form 但ShowModal()會lock住form必須關掉這個form才可使用其他的form 希望對你的form 流程上的管理有幫助 ---------------------- 台上一分鐘,台下十年功
------
台上一分鐘,台下十年功
xfile
初階會員


發表:21
回覆:80
積分:25
註冊:2004-10-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-20 16:46:35 IP:220.130.xxx.xxx 未訂閱
引言: 插個花... 另外一提 show() 並不會 Focuse 鎖住Form...所以使用後可以自由的切換form 但ShowModal()會lock住form必須關掉這個form才可使用其他的form 希望對你的form 流程上的管理有幫助
因為我希望做到 當form2達到被刪除的條件時,form2能主動通知form1刪除它,所以需要用主動的傳值法。 關於這點,我已經找到 void __fastcall (__closure *Del)(int); 這招來把 form2 的函式指向 form1,成功轉移流程。 接下來就是關掉它,也就是呼叫 Del 函式的時機,我現在無法把在 刪除 form2 前把 form2 發生的所有事件清光,這樣會造成當我在 form1 中刪除 form2 時出現記憶體存取錯誤。因為已經被我刪掉的 那個 form 仍有事件要進行,殘存的事件無法跟 form 對應而發生錯誤 ,苦惱 ....... 若要等所有事件發生完畢也是可以,可是我不知道要怎麼做 :( 好不容易解決了一件問題的說 :( 發表人 - xfile 於 2004/10/20 17:14:23 發表人 - xfile 於 2004/10/20 17:21:17
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-20 23:16:28 IP:221.169.xxx.xxx 未訂閱
xfile:我個人感覺你好像把東西處理複雜化。一定需要由Form1去Close Form2? 試試API吧! // HANDLE hCurrentWindow PostMessage(Form2->Handle, WM_QUIT, 0, 0); 或 SendMessage(GetActiveWindow(), WM_CLOSE, 0, 0); 請參考: http://delphi.ktop.com.tw/topic.php?topic_id=33635 【問題】請問在程式中如何可以關閉另一程式? 答題得分者為:ha0009 http://delphi.ktop.com.tw/topic.php?topic_id=43250 【問題】sendmessage(handle,wm_close,0,0) 關閉ie 無效? 答題得分者為:Rain Rain 解釋sendmessage及postmessage 之間的差別 The SendMessage function sends the specified message to a window or windows. It calls the window procedure for the specified window and does not return until the window procedure has processed the message. The PostMessage function places (posts) a message in the message queue associated with the thread that created the specified window and then returns without waiting for the thread to process the message. SendMessage發送到消息至表單過程(調用WndProc)並且等待處理結果再返回、PostMessage不同、只是把消息存入待處理的消息佇列中、不等待線程對消息的處理結果、沒有返回值。WM_CLOSE和WM_QUIT似乎是兩個比較特殊的消息、之所以用SendMessage無法關閉IE、可能是IE視窗消息處理機制引起的(換了其他的視窗例如記事本則可)、具體是怎麼樣的就不清楚了 請參考! Andy Chang
------
Andy Chang
xfile
初階會員


發表:21
回覆:80
積分:25
註冊:2004-10-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-21 01:10:31 IP:219.81.xxx.xxx 未訂閱
引言: xfile:我個人感覺你好像把東西處理複雜化。一定需要由Form1去Close Form2? 試試API吧! Andy Chang
因為某些原因,所以會有上述的條件限制,各位就把它當成背著龜殼練功吧 我是用 form 去處理的,在 form 中只要下了 Close(),應該就會把 form 刪除 並釋放記憶體,frame 則不會這樣,所要額外作 delete 的動作。 我師傅沒看到我是用 form 去做的,以為我用 frame,所以才會一直要求我 要由 form1 去刪掉它,所以這是烏龍事件 :Q 我還沒機會用上各位提供的招式哩 還是很感謝各位 :)
系統時間:2024-04-20 19:18:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!