【发布时间】:2016-10-27 22:09:17
【问题描述】:
我想引用一个存在于多个框架中的组件(使用循环)。所有框架的组件都相同。
- 我有一个名为“comboBoxAccount”的组合框。
-
我也有多个帧(我在运行时实例化)。 我创建的框架命名为:
frm1、frm2、frm3
每个框架都有一个在运行时创建的多个 TabSheets,名为: page_1、page_2、page_3
所以,我目前正在使用:
Tfrm1(FindComponent('page_'+i)).comboBoxAccount
这意味着我在循环中使用 FindComponent 和 i 来访问所有 TabSheets 中的所有 comboBoxAccount。
问题是我必须使用强制转换来让 Delphi 了解我要访问哪个组件,所以我把 Tfrm1( ) 放在了 FindComponent 前面。
那么,如果我想在循环中使用强制转换,我该怎么办?
我可以使用:
Tfrm1(FindComponent('page_'+i)).comboBoxAccount
Tfrm2(FindComponent('page_'+i)).comboBoxAccount
Tfrm3(FindComponent('page_'+i)).comboBoxAccount
但是有没有一种方法可以循环Tfrm 而无需一一编写?
【问题讨论】:
-
请出示您的实际可编译代码
-
这里涉及到我的问题的部分太多了,需要很多行代码。我的主要问题是:有没有办法从运行时实例化的框架中访问控件?有 TabSheets,对于每个 TabSheets,都有多个 TabSheets(在运行时创建),并且在每个子 TabSheet 内部都有一个带有我要访问的控件的框架。我可以使用标签吗?或者以任何方式访问控件的控件(TabSheets 内的 Tabsheets)?
-
好的。那就不要给我们任何上下文。但不要指望主题帮助。
-
不是我不想给出我的代码,我只是要以一种可以理解的方式重写它,所以这需要一些时间。也许今天我会完成它。放置 350 多行代码会更好吗?因为如果我不重写它并只把函数放在这里,我的朋友会花费这么多的代码行..
-
阅读此minimal reproducible example。就我个人而言,我永远不会调用 FindComponent。为什么不只记住需要使用的控件。把它们放在一个容器里。永远不要使用这样的不安全演员表。使用类型检查强制转换。