在Delphi中巧改窗体文件实现控件数组

http://tech.ddvip.com   2006年07月30日    社区交流

本文详细介绍在Delphi中巧改窗体文件实现控件数组

for I := 1 to ControlCount-1 do
   if (Controls[I] is Tlabel) then
  (Controls[I] as Tlabel).Caption := Test;
  这段代码的功能是将窗体上所有Label的Caption属性设为Test;这是一种非常有用的方法,大家如果不太熟悉可以参考delphi帮助作进一步了解。这种方法有很多局限,最明显的是我们并不知道Controls[i]或Components[i]到底代表哪一个控件,只能用遍历的方法进行筛选,这不仅影响了程序执行的效率,也带来编程上的繁琐。

  其实,Controls和Components中控件的排列顺序和对应的窗体文件(.dfm)中控件描述代码段的排列顺序是相同的。前面我们谈到窗体文件是可以进行适当修改的,也就是说,我们可以根据需要调整窗体文件中控件描述代码段的排列顺序,让Controls和Components这两个控件数组全在掌握之中,这样我们就能清楚知道Controls[I]或Components[I]具体代表的是哪一个控件。下面举例说明。

  比如,我们想让窗体Form1上的所有Tbutton灰化,最简单的方法是一句一句的编写代码:

Button1.Enabled := False;
Button2.Enabled := False;
   … …
  如果Tbutton数量很多,代码就变得很冗长。于是我们采用一个循环来实现: for I := 0 to ControlCount -1 do
   if Controls[I] is Tbutton Then
  (Controls[I] as Tbutton).Enabled := False;
  现在我们有了更有效的方法,首先打开窗体文件(Form1.dfm),调整Tbutton的排列顺序,让所有Tbutton的代码段(Object…end)都排在一起,然后数一下前面其它控件代码段的个数,设为n,n-1就是第一个Button在Controls(Components)数组中的位置,这样程序就很简单: for I:= n-1 to n-1+ButtonNum do
  (Controls[I] as Tbutton).Enabled := False;
  代码的效率和简洁比以前有了很大提高。其中ButtonNum是Button的个数。

  下一个例子更能体现利用这一规律的优越性。在编写Socket通信程序的时候,我们通常需要将用户输入的信息按照一定的顺序形成字符串,然后发送给服务器,服务器再根据事先约定的顺序解包,提取出内容,进行入库或其它操作。在形成字符串时,一般都是直接写代码,比如:

责编:豆豆技术应用

正在加载评论...