我想在点击按钮时检查所有复选框。所有对象都在visual studio 2010 c ++的表单应用中。问题的关键是每个对象(复选框)都有各种名称,CheckBox1,CheckBox2,...我使用值“CheckBox”创建UnicodeString,以及以1开头的int值,并将它放在第三个变量中以查找对象,这是有效的,但是不知道如何检查所有这些盒子,请帮忙。
Windows 7,64,Visual Studio 2010(c ++)或c ++ builder 2010
答案 0 :(得分: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 :(得分:1)
为什么不将所有内容添加到包含复选框的向量中,然后在必要时迭代它们?这将允许您单独引用每个复选框,但同时引用所有复选框。
cliext::vector<System::Windows::Forms::CheckBox^> items;
items.push_back(checkbox1);
.
.
.
items.push_back(checkboxN);
重要的是你还要包括
#include <cliext/vector>
由于标准库中的法向量当前无法支持此控件。
答案 2 :(得分: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));
}