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

想要check 每個TCheckBox的Checked

答題得分者是:taishyang
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-08 14:40:27 IP:61.30.xxx.xxx 未訂閱
各位大大:   小弟有個問題:   如果,今天我建立的十個Edit0~9,我若想要幫每個Edit填入字串,我可以使用一個迴圈,向下面一樣來填入字串: 
  for(i=0;i<=9;i  )
{
 ((TEdit *)FindComponent("Edit" IntToStr(i)))->Text="要輸入的字串";
}
 
。 今天,如果我建立了十個CheckBox0~9。我想要用個迴圈來check每個if(CheckBox(i)->Checked==true),請問這樣的語法該如何下呢? 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡! 發表人 - taishyang 於 2005/03/08 18:33:23
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-08 15:06:47 IP:61.66.xxx.xxx 未訂閱
參考一下     
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    bool BChkAll = true;
    for(int i = 0 ; i <= 9; i   )
    {
        TCheckBox *CheckBox = dynamic_cast(FindComponent("CheckBox" IntToStr(i)));
        if ( !CheckBox->Checked )
        {//有任一個CheckBox沒勾選
            BChkAll = false;
            break;//不須再試其他的CheckBox
        }
    }
    if ( BChkAll )
        Edit1->Text = "Check All";
    else
        Edit1->Text = "Not Check All";    } 
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-08 17:23:11 IP:61.30.xxx.xxx 未訂閱
引言: 參考一下
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    bool BChkAll = true;
    for(int i = 0 ; i <= 9; i   )
    {
        TCheckBox *CheckBox = dynamic_cast(FindComponent("CheckBox" IntToStr(i)));
        if ( !CheckBox->Checked )
        {//有任一個CheckBox沒勾選
            BChkAll = false;
            break;//不須再試其他的CheckBox
        }
    }
    if ( BChkAll )
        Edit1->Text = "Check All";
    else
        Edit1->Text = "Not Check All";    } 
感謝大大的回答,不過小弟我是想要check每一個Checked為true or false,而不是全部為true or false 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-08 18:25:27 IP:210.68.xxx.xxx 未訂閱
您好: 試試下面的code 
 
  for (int i=0; i<=9; i  )
  {
     if (((TCheckBox *)FindComponent("CheckBox" IntToStr(i)))->Checked)
     {
        ShowMessage("CheckBox" IntToStr(i) " Checked!");
     }
  }
不知道是不是您要的 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 -
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-09 08:43:04 IP:61.66.xxx.xxx 未訂閱
引言: 感謝大大的回答,不過小弟我是想要check每一個Checked為true or false,而不是全部為true or false
改一下就好了
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    char Msg[40];
    for(int i = 0 ; i <= 9; i   )
    {
        TCheckBox *CheckBox = dynamic_cast(FindComponent("CheckBox" IntToStr(i)));
        if ( CheckBox->Checked )
        {
            sprintf(Msg,"Check Box %d Checked",i);
        }
        else
        {
            sprintf(Msg,"Check Box %d Not Checked",i);
        }
        Memo1->Lines->Add(Msg);
    }
}
FCI
一般會員


發表:5
回覆:11
積分:3
註冊:2005-10-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-14 16:04:16 IP:211.75.xxx.xxx 未訂閱
大大,我用您的方式,但出錯了,請問是那兒出錯..     **新手上路,煩請多多幫忙** 風是移動的, 雲是改變的, 水是不定的, 人是成長的.
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-14 21:52:40 IP:221.169.xxx.xxx 未訂閱
那是因為FindComponent沒有找到擁有該名字的TCheckBox 或者是找到了,但是dynamic_cast失敗 導致傳回的CheckBox指標為null 所以在FindComponent之後,記得先檢查傳回的指標是否為null 才去access他
FCI
一般會員


發表:5
回覆:11
積分:3
註冊:2005-10-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-10-16 01:04:39 IP:61.230.xxx.xxx 未訂閱
引言: 那是因為FindComponent沒有找到擁有該名字的TCheckBox 或者是找到了,但是dynamic_cast失敗 導致傳回的CheckBox指標為null 所以在FindComponent之後,記得先檢查傳回的指標是否為null 才去access他
大大謝謝您的回答 我已經確定是dynamic_cast的傳回失敗 但我CHECK了所有的checkbox的名稱但是還是有錯誤 我在.h 中設了 TCheckBox *CheckBox1; 及 TCheckBox * CheckBoxes[5]; 也在.ccp 中設立陣列 CheckBoxes[0] =CheckBox1; 如果用TCheckBox *CheckBox= dynamic_cast< TCheckBox* >(CheckBox1) 可以拿出值 但如果用下列 就不行了 1==> TCheckBox *CheckBox= dynamic_cast< TCheckBox* >(Sebder); 2==>TCheckBox *Box= dynamic_cast< TCheckBox*>(FindComponent("CheckBoxes" IntToStr(i))); 煩請大大幫我解釋一下,謝謝 **新手上路,煩請多多幫忙** 風是移動的, 雲是改變的, 水是不定的, 人是成長的. 發表人 - FCI 於 2005/10/16 01:11:21 發表人 - FCI 於 2005/10/16 01:15:46
FCI
一般會員


發表:5
回覆:11
積分:3
註冊:2005-10-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-10-16 01:44:09 IP:61.230.xxx.xxx 未訂閱
謝謝大大,我已經解開了 void __fastcall TForm1::Button1Click(TObject *Sender) {  for (int i=0; i<5; i ) { TCheckBox *Box= dynamic_cast< TCheckBox *>(CheckBoxes[i]); if (Box == NULL) { ShowMessage("NULL"); return; } else if((Box == CheckBoxes[i])&&(Box->Checked)) { ShowMessage("CheckBox" IntToStr(i) " Checked!"); } } } 只要這樣寫就可以了< >,謝謝您< > **新手上路,煩請多多幫忙** 風是移動的, 雲是改變的, 水是不定的, 人是成長的. 發表人 - FCI 於 2005/10/16 01:50:23
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-10-17 20:31:57 IP:221.169.xxx.xxx 未訂閱
TCheckBox *Box= dynamic_cast(CheckBoxes[i]);
dynamic_cast的用途在轉型 但是CheckBoxes[i]本身的type就是TCheckBox了,所以這邊轉型的動作是多餘的 你誤會了樓上大大的做法.. 變數名跟元件名是不一樣的 以TCheckBox* CheckBoxs[5];來說 CheckBoxes是變數名 CheckBoxes[i]->Name 是元件名 FindComponent的用途是用來找尋元件名的,所以參數是字串
系統時間:2024-05-06 3:41:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!