我使用C ++ Builder的5.有没有一种方法来组组不同的控制,以便通过简单地调用,例如, myGroup.Enabled = false;
将设置所有组控件enabled
属性设置为false? 我不能用一个组框,因为控件(标签,复选框,等等)都在不同TabPages
。
我想问的原因是,所以我没有做调用每个控件的enabled
明确财产,可以用一个简单的调用做到这一点。
如果没有,我怎么可以创建一个自定义的控制类来做到这一点?
我使用C ++ Builder的5.有没有一种方法来组组不同的控制,以便通过简单地调用,例如, myGroup.Enabled = false;
将设置所有组控件enabled
属性设置为false? 我不能用一个组框,因为控件(标签,复选框,等等)都在不同TabPages
。
我想问的原因是,所以我没有做调用每个控件的enabled
明确财产,可以用一个简单的调用做到这一点。
如果没有,我怎么可以创建一个自定义的控制类来做到这一点?
您可以使用Tag属性的控件,并创建自己的分组。
void TForm1::SetControlState(TWinControl *WinCtrl, const bool IsEnabled, const int TagValue)
{
// set the enabled property for each control with matching TagValue
for (int Index = 0; Index < WinCtrl->ControlCount; ++Index)
{
if (WinCtrl->Controls[Index]->Tag == TagValue)
{
WinCtrl->Controls[Index]->Enabled = IsEnabled;
}
// set child controls
if (WinCtrl->Controls[Index]->InheritsFrom(__classid(TWinControl)))
{
TWinControl *TempWinCtrl;
TempWinCtrl = static_cast<TWinControl *>(WinCtrl->Controls[Index]);
SetControlState(TempWinCtrl, IsEnabled, TagValue);
}
} // end for
}
另外,如果要启用/禁用一气呵成所有控件。
void TForm1::SetControlState(TWinControl *WinCtrl, const bool IsEnabled)
{
// set the enabled property for each control with parent TabSheet
for (int Index = 0; Index < WinCtrl->ControlCount; ++Index)
{
WinCtrl->Controls[Index]->Enabled = IsEnabled;
// disable child controls
if (WinCtrl->Controls[Index]->InheritsFrom(__classid(TWinControl)))
{
TWinControl *TempWinCtrl;
TempWinCtrl = static_cast<TWinControl *>(WinCtrl->Controls[Index]);
SetControlState(TempWinCtrl, IsEnabled);
}
} // end for
}
例子:
// disable all controls on the form
SetControlState(Form1, false);
// disable all controls on a tabsheet
SetControlState(TabSheet1, false);
注:上面的代码已经与C ++ Builder的2007测试
既然你要组的控制并不是在同一个容器,那么我建议使用一个TAction(看TActionList组件)。 所有的TControl后代有一个公共的(有时甚至出版) Action
特性。 您可以在同一时间分配给多个控件相同TAction对象。 启用/禁用TAction(或更新它的任何其它性质的)将相应地自动更新所有相关联的控件。