【发布时间】:2012-12-21 08:55:31
【问题描述】:
如何检查表单的所有组件并验证组件的类型是否为TEdit?
【问题讨论】:
标签: c++builder vcl
如何检查表单的所有组件并验证组件的类型是否为TEdit?
【问题讨论】:
标签: c++builder vcl
您可以使用dynamic_cast operator。
【讨论】:
如果我错了,请见谅,但 embarcadero 不会自动将所有表单组件对象指针添加到类定义(在头文件中)..
如:
class TFormSomeForm : public TForm
{
__published:
TEdit *SomeEditBox;
TEdit *AnotherEditBox;
...
}
意味着您可以从标题中分辨出哪些组件属于 TEdit 类型。
或者您可以单击设计视图中的组件,对象检查器将显示类型。
【讨论】:
我的函数设置 TWinControl 及其子项中所有编辑的 Text 属性。
void __fastcall SetEditsText(TWinControl* winControl, UnicodeString editsText)
{
for (int c = 0; c < winControl->ControlCount; c++)
{
TControl* ctrl = winControl->Controls[c];
TWinControl* wc = dynamic_cast<TWinControl*>(ctrl);
// Check if it's grouping component
if (wc != NULL)
{
// Set edits of children
SetEditsText(wc, editsText);
}
else
{
if (ctrl->ClassType() == __classid(TEdit))
{
TEdit* ecomp = (TEdit*) ctrl;
ecomp->Text = editsText;
}
}
}
}
使用:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SetEditsText(form1, ""); // Clear all edits
}
【讨论】: