2011-12-16 13 views
4

我想檢查所有複選框,當點擊按鈕。所有對象都在Visual Studio 2010 C++的表單應用程序中。問題的關鍵在於每個對象(複選框)都有各種不同的名稱,CheckBox1,CheckBox2,...我使用值爲「CheckBox」的UnicodeString和以1開頭的int值,並將它們放在第三個變量中以查找對象,這是工作,但沒有線索如何檢查所有這些盒子,請幫助。如何以編程方式檢查表單應用程序中的所有複選框?

的Windows 7,64,Visual Studio 2010中(C++)或C++ Builder 2010

+0

在Win32 API中,複選框沒有名稱 - 它們具有數字ID。我認爲你正在使用C++ Builder的庫(它仍然稱爲OWL?)並將其誤認爲是WinAPI。請重溫。 – 2011-12-16 02:42:45

+0

這是哪一個? C++ Builder或Visual Studio 2010? – 2011-12-17 13:15:32

回答

2

我做了另一個組件類似的東西,這是我怎麼沒使用C++ Builder的。

for (int i = 0; i < this->ComponentCount; i++) 
{ 
TCheckBox *TempCheckBox = dynamic_cast<TCheckBox *>(this->Components[i]); 
if (TempCheckBox) 
{ 
    TempCheckBox->Checked = true; 
} 
} 

這將遍歷表單上的所有組件,如果組件是TCheckBox,它將被檢查。

1

你爲什麼不添加一切含複選框的載體,然後通過他們全部循環,必要時?這將允許您單獨引用每個複選框,但是一次全部引用。

 cliext::vector<System::Windows::Forms::CheckBox^> items; 
    items.push_back(checkbox1); 
    . 
    . 
    . 
    items.push_back(checkboxN); 

重要的是,你還包括

#include <cliext/vector> 

由於在標準庫中的法向量是目前無法支持這種控制。

1

在C++ Builder中,您可以將您的所有TCheckBox*指針到一個數組或std::vector,然後你就可以在需要的時候遍歷,如:

TCheckBox* cb[10]; 

__fastcall TForm1::TForm1(TComponent *Owner) 
    : TForm(Owner) 
{ 
    cb[0] = CheckBox1; 
    cb[1] = CheckBox2; 
    ... 
    cb[9] = CheckBox10; 
} 

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
    for (int i = 0; i < 10; ++i) 
     cb[i]->Checked = true; 
} 

如果你有很多的複選框,並不想填補手整個數組中,你可以使用一個循環,而不是:

__fastcall TForm1::TForm1(TComponent *Owner) 
    : TForm(Owner) 
{ 
    for (int i = 0; i < 10; ++i) 
     cb[i] = (TCheckBox*) FindComponent("CheckBox" + IntToStr(i+1)); 
} 
相關問題