Delphi模拟实现控件数组分析
1、控件数组为使用共享公共功能的控件组提供了一种方便的方式。例如,控件组可以用来显示相关数据,或者在单击时提供相关的操作。控件数组处理多个控件统一事件上很方便此功能使得创建一个能够响应由多个不同控件引发的事件的处理程序方法成为可能。使用控件数组可开发出一些小型游戏。控件数组的灵活使用能够大大提高编程人员的编程效率。Delphi未提供专门的控件数组,本文主要讨论的是如何在Delphi中模拟实现控件数组。
2、控件数组原理
标准的控件数组是由一组相同类型的控件组成。它们共用一个控件名,具有相同的属性,执行相似的操作,同时共享同样的事件过程。为区分控件数组中的各个元素,具有此功能的程序设计语言通常会把各元素的下标值传送给过程,过程从接收到的下标来区分不同的元素。
3、Delphi中控件数组的模拟实现
3.1Delphi模拟控件数组原理分析
VB是具有的灵活的控件数组功能的典型程序设计语言,但在DELPHI中却未专门提供控件数组,在很多DELPHI的教材中都提到一个方法:TLISTSTRING;使TLISTSTRING类控制容器中的控件以达到使用控件数组的目的;另外一种途径是由用户自己来开发带数组性质的VCL组件。这两种方法对DELPHI的是初级入门者是不现实的。使用TLISTSTRING类代码量大,难以阅读,使用时非常吃力;由用户自己制作组件这又不是DELPHI初级使用者所能完成的工作。在Delphi中,各控件排列的先后顺序和它被拖放到窗体上的先后顺序相同。这个顺序是可以人为修改的,通过修改这个顺序,能够实现控件的数组化。
3.2Delphi模拟控件数组模拟实现方案
使用Delphi窗体的Components[I],ComponentCount;ComponentIndex三个属性模拟控件的数组化。各属性相关含义如下:
Components[I]属性表示当前窗体上所有属于TComponent类的对象形成的数组ComponentCount属性表示当前窗体上所有属于TComponent类的对象的个数ComponentIndex属性表示当前窗体上属于TComponent类的某个对象在Components[I]数组中的下标
将窗体上所有Button组件的Caption属性设为Tbutton,代码如下:
VarI:integer;
forI:=0tocomponentCount-1do‘利用for循环判断某对象是否属于Tbutton类
if(components[I]isTbutton)then
(components[I]asTbutton).Caption:='TButton';
分析:For循环用于遍历当前窗体上所有属于TComponent类的对象;if语句用于判断某个对象是否属于Tbutton类;如果条件成立,则将该对象的Caption属性修改为'TButton'。通过上述分析,不难发现,这种方法有一定局限性,最明显的是设计人员并不知道Components[I]到底代表哪一个控件,因此只能用遍历的方法进行筛选,这不仅影响了程序执行的效率,也带来编程上的繁琐问题。
要解决上述问题,就要用到TComponent类的ComponentIndex属性。在delphi7.0中,ComponentIndex属性表示当前窗体上属于TComponent类的某个对象在Components[I]数组中的下标并且该属性是一个可读写属性;该属性的默认值是该组件的添加次序(从0开始计数),那么就可以利用这一属性在组件生成时将同类组件的ComponentIndex属性设置为连续的自然数数列;比如:n,n+1,n+2,……,n+m;如果我们要修改窗体上的该类组件,只需要遍历Components[I]数组的部分下标(比如Components[n]……Components[n+m])就可以实现。从而提高程序执行效率,同时也避免了编程上的繁琐问题。
- 我用了一个很复杂的图,帮你们解释下“23版最新北大核心目录有效期问题”。
- 重磅!CSSCI来源期刊(2023-2024版)最新期刊目录看点分析!全网首发!
- CSSCI官方早就公布了最新南核目录,有心的人已经拿到并且投入使用!附南核目录新增期刊!
- 北大核心期刊目录换届,我们应该熟知的10个知识点。
- 注意,最新期刊论文格式标准已发布,论文写作规则发生重大变化!文字版GB/T 7713.2—2022 学术论文编写规则
- 盘点那些评职称超管用的资源,1,3和5已经“绝种”了
- 职称话题| 为什么党校更认可省市级党报?是否有什么说据?还有哪些机构认可党报?
- 《农业经济》论文投稿解析,难度指数四颗星,附好发选题!
- 期刊知识:学位论文完成后是否可以拆分成期刊论文发表?
- 号外!出书的人注意啦:近期专著书号有空缺!!