全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:932
推到 Plurk!
推到 Facebook!

如何讓不同元件執行同一動作

答題得分者是:RaynorPao
Ming Lin
一般會員


發表:27
回覆:53
積分:21
註冊:2003-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-28 10:48:39 IP:220.130.xxx.xxx 未訂閱
因為小弟有10個edit,要讓其按下F1,則會在該edit秀出F1,如下 void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { switch (Key) { case 112: this->Edit1->Text="F1"; break; } } 但小第的問題是程式需有10個edit,Edit1~Edit10,那一定要10個事件嗎? 如果把Edit2~Edit10的keydown事件指過來,則會發生只有Edit1->Text改變而已 請各位大大教教我吧~看有沒有方法在一個事件或函式搞定!! 謝謝
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-28 11:02:49 IP:203.73.xxx.xxx 未訂閱
引言: 因為小弟有10個edit,要讓其按下F1,則會在該edit秀出F1,如下 void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { switch (Key) { case 112: this->Edit1->Text="F1"; break; } } 但小第的問題是程式需有10個edit,Edit1~Edit10,那一定要10個事件嗎? 如果把Edit2~Edit10的keydown事件指過來,則會發生只有Edit1->Text改變而已 請各位大大教教我吧~看有沒有方法在一個事件或函式搞定!! 謝謝
MingLin 你好:
(1)把所有 Edit 的 OnKeyDown 都指向同一個 event procedure (例如: Edit1KeyDown)
(2)然後在這個 event procedure 裡面加入以下的程式碼
>(>Text="F1">
(3)想要知道是哪一個 Edit 被按到,只需要這樣子寫就可以了
   ShowMessage(dynamic_cast(Sender)->Name);
(4)你如果只想更改被按到的 Edit 的內容的話,而不是要更改所有 Edit 的內
   容的話,那只需要這樣子寫就可以了
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
   if(Key==VK_F1)
   {
      dynamic_cast(Sender)->Text="F1";
   }
}
(5)請再依照自己的需求,自行修改
    < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --    發表人 - RaynorPao 於 2004/07/28  11:58:40
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
Ming Lin
一般會員


發表:27
回覆:53
積分:21
註冊:2003-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-28 11:23:35 IP:220.130.xxx.xxx 未訂閱
感謝包子大大發功,果然不同凡響, 哈哈~ 只是小弟不知道如何判斷是哪個Edit觸發動作進來的 所以FindComponent也就不知道指向哪個, 像是我在Edit2按下,但是我要怎麼知道要FindComponent(Edit "2")呢? 小弟愚鈍,只想到再按下時加變數在指過來,但是這樣也要有10個事件
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-28 11:40:35 IP:219.84.xxx.xxx 未訂閱
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{  
   TEdit *edt=dynamic_cast(Sender);
   if(!edt)
     return;
   
   switch (Key)
   {
    case 112:
    edt->Text="F1";
    break;
   }    }
 
改成這樣行不行呢??
Ming Lin
一般會員


發表:27
回覆:53
積分:21
註冊:2003-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-28 12:09:11 IP:220.130.xxx.xxx 未訂閱
原來是這樣阿,dynamic_cast(Sender)相當好用也~ 感謝兩位大大的幫助, m(_._)m 小弟致敬 但是包子大大比較早答,所以我給他分嚕 bass15大大,也謝謝你 ^^
系統時間:2024-04-29 8:21:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!