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

如何知道Button已經被按下了??

答題得分者是:brook
ddaken
一般會員


發表:39
回覆:33
積分:19
註冊:2005-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-30 12:24:26 IP:61.230.xxx.xxx 訂閱
請問各位大大~如果我有50個Button~~
當第一個Button被按下時,我在Button1Click裡面會有一個for迴圈在執行
可是我希望當此時按下其他的Button時,可以馬上跳出此for迴圈去執行其他ButtonxClick裡面的事件

有沒有什麼方法或是參數可以紀錄或是使用呢?

salo0610
高階會員


發表:42
回覆:120
積分:107
註冊:2003-02-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-30 13:08:58 IP:220.132.xxx.xxx 未訂閱
可以利用 Button 的 Tag 當成 flag ,紀錄是不是按了 ,for 迴圈 是不是 跑完了!!

===================引 用 ddaken 文 章===================
請問各位大大~如果我有50個Button~~
當第一個Button被按下時,我在Button1Click裡面會有一個for迴圈在執行
可是我希望當此時按下其他的Button時,可以馬上跳出此for迴圈去執行其他ButtonxClick裡面的事件

有沒有什麼方法或是參數可以紀錄或是使用呢?

ddaken
一般會員


發表:39
回覆:33
積分:19
註冊:2005-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-30 18:00:31 IP:61.230.xxx.xxx 訂閱
Hello salo0610 大大
可否請您再說清楚一點??
這個方法我有試過~但是並沒有如願的馬上跳出for迴圈~
您的意識是這樣嗎?
可是我試過當我按下Button1接著馬上按下Button2的時候~
Label1->Caption永遠都是0~並不會馬上偵測到Button2->Tag==1呀??
看樣子似乎是當Button1Click()在執行時,我按下Button2Click()並不會馬上讓
Button2->Tag=1;



[code cpp]

void __fastcall TForm1::Button1Click(TObject *Sender)
{


for(int alpha=0; alpha<50000; alpha )
{
.....
Label1->Caption=Button2->Tag;
if (Button2->Tag=1)
break;
}
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button2->Tag=1;
for(int qq=0; qq<50000; qq )
{
.....
}
}

[/code]
編輯記錄
ddaken 重新編輯於 2008-07-30 18:01:19, 註解 無‧
ddaken 重新編輯於 2008-07-30 18:01:36, 註解 無‧
ddaken 重新編輯於 2008-07-30 18:02:00, 註解 無‧
ddaken 重新編輯於 2008-07-30 18:02:01, 註解 無‧
ddaken 重新編輯於 2008-07-30 18:02:01, 註解 無‧
ddaken 重新編輯於 2008-07-30 18:02:40, 註解 無‧
ddaken 重新編輯於 2008-07-30 18:11:40, 註解 無‧
brook
資深會員


發表:56
回覆:321
積分:365
註冊:2002-07-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-07-31 07:54:52 IP:218.166.xxx.xxx 訂閱

[code cpp]
請在此區域輸入程式碼
int Quit;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Quit = 1;
Sleep(200);
Quit = 0;
for (int i=0;i<10000;i )
{
Application->ProcessMessages();
if (Quit) break;

Button1->Caption = i;
Sleep(100);
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
Quit = 1;
Sleep(200);
Quit = 0;
for (int i=0;i<10000;i )
{
Application->ProcessMessages();
if (Quit) break;

Button2->Caption = i;
Sleep(100);
}
}
[/code]
ddaken
一般會員


發表:39
回覆:33
積分:19
註冊:2005-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-07-31 14:02:40 IP:61.219.xxx.xxx 訂閱
Hello brook大大
您的方法確實可以讓Button1停止~馬上去做Button2的動作
不過我發現~當Button2做完後~會再跳回Button1從新執行一次~
請問有沒有方法~讓Button2做完後就結束了?不要再跳回Button1從新執行一次呢?
salo0610
高階會員


發表:42
回覆:120
積分:107
註冊:2003-02-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-07-31 16:20:32 IP:220.132.xxx.xxx 未訂閱

[code cpp]

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if( Timer1->Tag==0 ){
Timer1->Enabled = true;
}
Button1->Tag = 1;
Button2->Tag = 0;
}
//------------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if( Timer1->Tag==0 ){
Timer1->Enabled = true;
}
Button1->Tag = 0;
Button2->Tag = 1;
}
//------------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Timer1->Enabled = false;
Timer1->Tag = 1;

while(Button1->Tag==1 || Button2->Tag==1 )
{
if( Button1->Tag==1 )
{
for(int i=0 ; i<100000 ; i )
{
Button1->Caption = String(i);
if(Button1->Tag==0) break;
Application->ProcessMessages();
}
Button1->Tag = 0;
}

if( Button2->Tag==1 )
{
for(int i=0 ; i<100000 ; i )
{
Button2->Caption = String(i);
if(Button2->Tag==0) break;
Application->ProcessMessages();
}
Button2->Tag = 0;
}
}
Timer1->Tag = 0;
}
//---------------------------------------------------------------------------

[/code]

但我覺得 我好像把事情弄復雜了!!!
ddaken
一般會員


發表:39
回覆:33
積分:19
註冊:2005-01-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-08-01 20:16:34 IP:118.169.xxx.xxx 訂閱
感謝,,,salo0610大大~

不過~我有超過50個button
如果改成這樣寫...似乎~有點複雜..

bcb到底是有什麼變數在"記住"已經有幾個button被按下了?~
下一步該執行哪個button?

大家碰到這樣類似的案件..都是怎麼處理呢?

brook
資深會員


發表:56
回覆:321
積分:365
註冊:2002-07-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-08-02 10:54:35 IP:218.166.xxx.xxx 訂閱

[code cpp]
請在此區域輸入程式碼
int Quit;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Quit = 0;
for (int i=0;i<10000;i )
{
Application->ProcessMessages();
if (Quit) break;
Button1->Caption = i;
}
Quit = 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Quit = 0;
for (int i=0;i<10000;i )
{
Application->ProcessMessages();
if (Quit) break;
Button2->Caption = i;
}
Quit = 1;
}
[/code]
系統時間:2017-10-23 5:11:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!