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

請問Form 和Form之間的問題...

尚未結案
huanyuan
一般會員


發表:18
回覆:48
積分:18
註冊:2003-07-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-22 00:10:25 IP:220.132.xxx.xxx 未訂閱
若我有三個Form分別為A,B,C... 分別都可以Call Form D(此Form為Search的畫面,分別讓Form A,B,C來共用)... 我要怎麼去判斷說是那一個Form來call Form D呢... 是不是要用到Sender這個呢... 現在就是不知道程式要怎麼寫...>"< 麻煩各位大大指導一下囉...感恩...
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-22 02:05:39 IP:203.204.xxx.xxx 未訂閱
應該不用用到Sender 寫個共同變數 當各Form呼叫FormD時順道修改該值 當FormD,Show時判斷該變數值即可知道是誰在call  
void __fastcall TForm2::FormShow(TObject *Sender)
{
   if(CommVar=="FormA")
    {
    }
   else if(CommVar=="FormB")
     //..........;
}
 
huanyuan
一般會員


發表:18
回覆:48
積分:18
註冊:2003-07-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-22 09:46:34 IP:61.222.xxx.xxx 未訂閱
引言: 應該不用用到Sender 寫個共同變數 當各Form呼叫FormD時順道修改該值 當FormD,Show時判斷該變數值即可知道是誰在call
void __fastcall TForm2::FormShow(TObject *Sender)
{
   if(CommVar=="FormA")
    {
    }
   else if(CommVar=="FormB")
     //..........;
}
 
這個方式我用過了...只是在想說還有沒有辦法不用到共同變數的方式... 感謝大大指導...感恩...
yorkland
高階會員


發表:2
回覆:138
積分:108
註冊:2004-12-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-22 17:22:04 IP:220.130.xxx.xxx 未訂閱
A,B,C三個如果是三種不同物件, 而他們都是繼承TForm 例如: 他們分別為TAForm, TBForm, TCForm. 那麼在D中,只要用(Sender is TAForm)的方式比對.. if (Sender is TAForm) or (Sender like TAForm) then begin ... 你試看看is與like的用法, 也許能達到你要的功能。 end;
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-23 00:47:06 IP:203.204.xxx.xxx 未訂閱
不知道你是如何呼叫該Search form 一般利用Sender的方法可如下~ 
 
  TButton* now_Sender=(TButton*)Sender;
   if(now_Sender->Name=="Button1")
    //......;
   else
    //.......
但如果為不同的FORM之間傳遞,則此Sender為被呼叫的form此例為FormD 所以此法無實質效益~
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-25 21:20:22 IP:211.74.xxx.xxx 未訂閱
有三種做法: (1) 在 FormD Class 的 public: 加上一個自訂函數 bool Execute( int a); a 就是你的 From 代碼(自己用 enum去訂), 程式碼內容就是 bool TFormD::Execute( int a) { FormD->Show(); switch(a) { case 1: // 做你要做的事: break; case 2: // 依此類推. } } ================== 例如 FormA 要呼叫 FormD 原本是用FormD->Show(); 那現在就變成 FormD->Execute(1); 一樣的效果。 (2) 一樣在FormD class public 上加上一個變數(例如 int Work),也就是rogan321大大講的方法,再呼叫 FormD->Show() 之前,先設定 FormD->Work = 1; (3) 什麼都不需要,直接在 FormA、B、C 呼叫 FormD就好了.. 傳回的變數,直接在 A,B,C內處理就夠了. if( FormD->ShowModal() == mrOk) { DM->Query1->ParamByName("Zone")->AsString = FormD->Edit1->Text; DM->Query1->Open(); } 以上三種方法自己去選一個來用吧...
系統時間:2024-05-13 6:12:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!