如何以编程方式检查表单应用程序中的所有复选框?

问题描述:

我想检查所有复选框,当点击按钮。所有对象都在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

我做了另一个组件类似的东西,这是我怎么没使用C++ Builder的。

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

这将遍历表单上的所有组件,如果组件是TCheckBox,它将被检查。

你为什么不添加一切含复选框的载体,然后通过他们全部循环,必要时?这将允许您单独引用每个复选框,但是一次全部引用。

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

重要的是,你还包括

#include <cliext/vector> 

由于在标准库中的法向量是目前无法支持这种控制。

在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)); 
}