OZ8*_*8HP 3 delphi components count ttabsheet
我有以下代码,可以在我的标签页上的给定选项卡上循环所有组件.我已经尝试过在网上找到的相同代码的许多变体,但我根本无法让它工作.首先,我检查它是否是正确的选项卡 - 这是有效的.然后我检查看有多少组件 - 这不起作用.即使我现在有2个面板共有9个复选框,它也会显示0个组件.
procedure TfrmHsUsers.pagUsersClick(Sender: TObject);
var
i: integer;
Fieldname: string;
begin
if pagUsers.Properties.ActivePage.Name = 'tabProgram' then
begin
ShowMessage(IntToStr(pagUsers.Properties.ActivePage.ComponentCount));
for i := 0 to pagUsers.Properties.ActivePage.ComponentCount - 1 do
if (pagUsers.Properties.ActivePage.Components[i]) is TcxDbCheckBox then
begin
Fieldname := TcxDbCheckBox(pagUsers.Properties.ActivePage.Components[i]).DataBinding.DataField;
TcxDbCheckBox(pagUsers.Properties.ActivePage.Components[i]).Enabled := Settings.License.IsEnabled(Fieldname);
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我的代码中可能有什么问题的任何提示?
Dav*_*nan 10
怎么了,你正在循环整个Components财产.这列出了选项卡表所拥有的组件.对于在表单设计器中创建的组件,表单是所有者.所以预计这pagUsers.Properties.ActivePage.ComponentCount是零,因为你的表单上唯一拥有任何东西的东西就是表单本身.
您需要使用ControlCount和Controls[]迭代选项卡表的子项.只需更换全部使用ComponentCount同ControlCount,同样替换Components[]用Controls[].
请注意,ControlCount和Controls[]属性仅提供直接子项.由于您有面板,因此很可能将面板作为选项卡表的子项,并将复选框作为面板的子项.所以你需要迭代面板的子节点.
我在这里的答案显示了一种方法.如果您使用我在那里提供的代码,那么您对复选框的迭代可以非常简单地编写:
TabSheet := pagUsers.Properties.ActivePage;
for CheckBox in TControls.Enumerator<TcxDbCheckBox>(TabSheet) do
....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7368 次 |
| 最近记录: |