注册 登录
编程论坛 PowerBuilder

如何彩循环方式一次设置多个有规则命名的控件的属性

scandisk 发布于 2006-08-02 22:48, 2194 次点击
如有5个控件分别是:sle_1,sle_2,sle_3,sle_4,sle_5

我想做个循环语句如下:
int Li_no

FOR LI_NO=1 TO 5

sle_"1"="aaaa" //" 应是这个"1",如果用变量处理"

next
5 回复
#2
fgypblt2006-08-03 10:37
li_no值使对应single..控件。
假设所用为sle的text 属性
choose case li_no
case 1
sle_1.text="t"
.
sle_5.text=""
case 2
.
end choose

if..end if 也可

如果功能比较清楚,建议写入function
参数为int (即li_no值),返回single...//cb控件就是返回commandbu...类型
编程中调用此函数,得到所需sle控件,再定义属性即可
gf_test(li_no).text=...

[此贴子已经被作者于2006-8-4 16:29:09编辑过]

#3
scandisk2006-08-03 16:31
可能我没说清!

有5个按钮控件分别是:
CB_1
CB_2
CB_3
CB_4
CB_5

想用循环的方式一次性设置全部按钮的ENABLED=False
想采用如下方式实现

INT li_no
For Li_no=1 to 5
CB_?.Enabled=False
Next

关键是"?"处不知道如何处理?可否用变量实现,好VFP中就可采用宏(&)的形式实现,也就是CB_&li_no

#4
潇洒老乌龟2006-08-04 16:01

0306 -- 用变量操作多个控件

http://www.51pb.com/viewthread.php?tid=1169&extra=page%3D1
我现在有60个相同的控件,控件名为cbx_1~cbx_61
现在我要对这60个控件做同样的处理,是否有办法用循环来处理呢?
就象
for i=1 to 61
messagebox('',cbx_i.text)
next
相似的处理,我上面用法当然是错误的,只是不知道有没有什么办法来解决呢?

Integer li_control
String ls_name
//This 是窗口,换成window的名字
FOR li_control = 1 TO UpperBound(This.Control[])
ls_name = This.Control[li_control].classname()
IF Left(ls_name,4) = 'cbx_' AND &
Integer(Right(ls_name(),Len(ls_name) - 4)) >= 1 AND &
Integer(Right(ls_name(),Len(ls_name) - 4)) <= 61 THEN
//此处处理
//此处处理
CheckBox cbx_which
cbx_which = This.Control[li_control]
messageBox('',cbx_which.Text)

#5
潇洒老乌龟2006-08-04 16:01

0277 -- 对控件如何使用数组

http://www.51pb.com/viewthread.php?tid=1140&extra=page%3D2
  比较简单的一种情况:对窗口中的所有控件,处理它们的公共属性。代码如下:
  integer li_Count
  integer li_index
  li_Count = UpperBound(parent.Control[])
  For li_index = 1 to li_Count
   MessageBox('',parent.control[li_index].tag)
  next


  上面程序中,替换城如下脚本可以显示每一个控件的名称:
  MessageBox('',parent.control[li_index].ClassName())
  下面的脚本根据控件的类型做处理:
  integer li_Count
  integer li_index
  li_Count = UpperBound(parent.Control[])
  For li_index = 1 to li_Count
   choose case parent.control[li_index].TypeOf()
       case CommandButton!
         MessageBox('','commandbutton name=' + parent.control[li_index].ClassName())
       case CheckBox!
       ...
   end choose
  next

#6
潇洒老乌龟2006-08-04 16:02

0284 -- PB控件的“宏替换”
http://www.51pb.com/viewthread.php?tid=1147&extra=page%3D1

  问:
  我想编写一个程序,代码如下:
  P_1.PictureName = 'help.gif'
  P_2.PictureName = 'help.gif'
  P_3.PictureName = 'help.gif'
  P_4.PictureName = 'help.gif'
  P_5.PictureName = 'help.gif'
  请问有没有一种简单的办法,能让我用循环语句来实现?

  如:
  for i = 1 to 5
    P_***.PictureName = 'help.gif'
  next

  答:
  假设这段代码写在WINDOW的OPEN事件,THIS就是当前WINDOW:
  int i
  picture lp
  for i=1 to upperbound(this.Control)
    if typeof(this.Control)=picture! then
     lp=parent.Control
     // 可以通过 lp.classname() 进一步确定是不是要修改的图像控件
     lp.picturename='help.gif'
    end if
  next
  你也可以定义一个 picture 变量数组来进行操作,通过OpenUserObject()使它们出现在window中。

  答:
  int i
  picture p_temp
  for i = 1 to Upperbound(w_test.control)
    if left(w_test.control.classname,2) = 'p_' then
      p_temp = w_test.control
      p_temp.picturename = '.......'
    end if
  next

问:我现在有60个相同的控件,控件名为cbx_1~cbx_61现在我要对这60个控件做同样的处理,是否有办法用循环来处理呢?
就象
for i=1 to 61
  messagebox('',cbx_i.text)
next
相似的处理,我上面用法当然是错误的,只是不知道有没有什么办法来解决呢?

Integer li_control
String ls_name
//This 是窗口,换成window的名字
FOR li_control = 1 TO UpperBound(This.Control[])
  ls_name = This.Control[li_control].classname()
  IF Left(ls_name,4) = 'cbx_' AND &
    Integer(Right(ls_name(),Len(ls_name) - 4)) >= 1 AND &
    Integer(Right(ls_name(),Len(ls_name) - 4)) <= 61 THEN
    //此处处理
    CheckBox cbx_which
    cbx_which = This.Control[li_control]
    messageBox('',cbx_which.Text)
  END IF
NEXT

1