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

时间:2011-12-16 01:31:53

标签: c++ windows winapi checkbox

我想在点击按钮时检查所有复选框。所有对象都在visual studio 2010 c ++的表单应用中。问题的关键是每个对象(复选框)都有各种名称,CheckBox1,CheckBox2,...我使用值“CheckBox”创建UnicodeString,以及以1开头的int值,并将它放在第三个变量中以查找对象,这是有效的,但是不知道如何检查所有这些盒子,请帮忙。

Windows 7,64,Visual Studio 2010(c ++)或c ++ builder 2010

3 个答案:

答案 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));
}