如何以编程方式检查表单应用程序中的所有复选框?
问题描述:
我想检查所有复选框,当点击按钮。所有对象都在Visual Studio 2010 C++的表单应用程序中。问题的关键在于每个对象(复选框)都有各种不同的名称,CheckBox1,CheckBox2,...我使用值为“CheckBox”的UnicodeString和以1开头的int值,并将它们放在第三个变量中以查找对象,这是工作,但没有线索如何检查所有这些盒子,请帮助。如何以编程方式检查表单应用程序中的所有复选框?
的Windows 7,64,Visual Studio 2010中(C++)或C++ Builder 2010
答
我做了另一个组件类似的东西,这是我怎么没使用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));
}
在Win32 API中,复选框没有名称 - 它们具有数字ID。我认为你正在使用C++ Builder的库(它仍然称为OWL?)并将其误认为是WinAPI。请重温。 – 2011-12-16 02:42:45
这是哪一个? C++ Builder或Visual Studio 2010? – 2011-12-17 13:15:32