gpt4 book ai didi

delphi - 有没有办法获取容器控件上的所有控件?

转载 作者:行者123 更新时间:2023-12-03 14:37:20 25 4
gpt4 key购买 nike

我有一个带有一堆控件的表单,我想遍历某个面板上的所有控件并启用/禁用它们。

我尝试过这个:

var component: TComponent;
begin
for component in myPanel do
(component as TControl).Enabled := Value;
end;

但这没有任何作用。结果所有组件都在表单的组件集合中,而不是其父对象的组件集合中。那么有谁知道是否有什么方法可以将所有控件放入一个控件中? (除了像这样丑陋的解决方法,这是我最终不得不做的):

var component: TComponent;
begin
for component in myPanel do
if (component is TControl) and (TControl(component).parent = myPanel) then
TControl(component).Enabled := Value;
end;

有人请告诉我有更好的方法......

最佳答案

您正在寻找 TWinControl.Controls 数组和随附的 ControlCount 属性。这些是针对控件的直接子级的。要获得孙子等,请使用标准递归技术。

您并不真正需要 Components 数组(这是 for-in 循环迭代的内容),因为它没有任何内容一般来说,处理亲子关系。组件可以拥有没有子关系的事物,控件可以拥有它们不拥有的子事物。

另请注意,禁用控件也会隐式禁用其所有子控件。您无法与禁用控件的子级交互;操作系统不会向它们发送输入消息。不过,要使它们看起来被禁用,您需要单独禁用它们。也就是说,要使按钮具有灰色文本,即使该按钮不会响应鼠标单击,禁用其父级也是不够的。您需要禁用按钮本身以使其“禁用”地绘制自己。

关于delphi - 有没有办法获取容器控件上的所有控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/414928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com