| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1594 人关注过本帖
标题:问个小问题,请教这个怎么解决
只看楼主 加入收藏
hytizj023
Rank: 1
等 级:新手上路
帖 子:188
专家分:7
注 册:2023-3-2
收藏
得分:0 
以下是引用csyx在2023-4-21 09:24:17的发言:

For ii = 1 TO 10
    cNo = Transform(ii)
    With GetPem(thisform.pageframe1.page1.container4, 'Label'+cNo) as Label
        .Caption = Transform(Evaluate('lsb'+cNo))
        .Refresh()
        .Visible = !(.Caption == '0')
    EndWith
EndFor

看不太懂你这个,我大概理解为:和我的程序一样,好像是换了一种写法。不知道能不能这样理解。
我的意思,方法能不能像调用程序一样,do 统计,就完事了,不知道行不行
2023-04-21 10:53
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:709
专家分:2848
注 册:2018-3-13
收藏
得分:0 
是这个意思
要达到你的目的,新建表单方法,把上面需要变化的东西改成变量写到方法中,按钮中 Thisform.新建方法名(参数1,参数2, ...) 这样调用即可
例如,上面 container4 是可变的,方法内容就这么写:
Lparameters toCnt as Container
local ii, cNo
For ii = 1 TO 10
    cNo = Transform(ii)
    With GetPem(toCnt, 'Label'+cNo) as Label
        .Caption = Transform(Evaluate('lsb'+cNo))
        .Refresh()
        .Visible = !(.Caption == '0')
    EndWith
EndFor
按钮 click 调用此方法: Thisform.方法名(thisform.pageframe1.page1.container4)

*-- 上面这个实际无法运行,因为方法中访问不到你的局部变量 lsbXX,你可以把那些变量放入数组,同时作为参数传入,方法就这样定义:
Lparameters toCnt as Container, taLsb
...
    With GetPem(toCnt, 'Label'+cNo) as Label
        .Caption = Transform(Evaluate(taLsb[ii]))
...
click 调用时就改成:
Dimension aLsb[10]
aLsb[1] = lsb1
...
Thisform.方法名(thisform.pageframe1.page1.container4, @ aLsb)



[此贴子已经被作者于2023-4-21 11:14编辑过]


这家伙很懒,啥也没留下
2023-04-21 11:05
hytizj023
Rank: 1
等 级:新手上路
帖 子:188
专家分:7
注 册:2023-3-2
收藏
得分:0 

FOR i=1 TO 10
tt=ALLTRIM(STR(i))
thisform.pageframe1.page1.container4.label&tt..Caption=trans(eval('lsb'+ trans(i)))
thisform.pageframe1.page1.container4.label&tt..refresh
IF thisform.pageframe1.page1.container4.label&tt..Caption='0'
thisform.pageframe1.page1.container4.label&tt..visible=.f.
else
thisform.pageframe1.page1.container4.label&tt..visible=.T.
ENDIF
根据值给标签换颜色
...............
ENDFOR
我想在加一个操作,就是获取到值大于等于5,显示为蓝色(0,0,255),大于等于10,显示为红色(255,0,0),请教怎么做。
我主要不知道怎么获取变量
我总不能这样写吧
if lsb1>=5
.........
endif
你说的新建方法我得研究一下,应该我能实现
2023-04-21 11:26
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:709
专家分:2848
注 册:2018-3-13
收藏
得分:0 
32楼的代码加几句呗:
...
For ii = 1 TO 10
    cNo = Transform(ii)
    nVal = Evaluate('lsb' + cNo)
    With GetPem(toCnt, 'Label'+cNo) as Label
        .Caption = Transform(nVal)
        .Refresh()
        .Visible = !(.Caption == '0')
        .BackColor = Icase(nVal > 10, 0xff0000, nVal > 5, 0xff, 0xc0c0c0)    && 根据值改背景色
    EndWith
EndFor

这家伙很懒,啥也没留下
2023-04-21 12:15
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:709
专家分:2848
注 册:2018-3-13
收藏
得分:0 
算了,还就你现在的代码改吧
FOR i=1 TO 10
    tt = Ltrim(Str(i))
    nVal = eval('lsb' + trans(i))
    With thisform.pageframe1.page1.container4.label&tt as Label
        .Caption = trans((nVal)
        .refresh()
        .visible = !(.Caption='0')
        .backcolor = Icase(nVal>10,0xff, nVal>5,0xff0000, 0xc0c0c0)    && 根据值改背景色
    EndWith
ENDIF

[此贴子已经被作者于2023-4-21 12:29编辑过]


这家伙很懒,啥也没留下
2023-04-21 12:26
hytizj023
Rank: 1
等 级:新手上路
帖 子:188
专家分:7
注 册:2023-3-2
收藏
得分:0 
以下是引用csyx在2023-4-21 12:26:04的发言:

算了,还就你现在的代码改吧
FOR i=1 TO 10
    tt = Ltrim(Str(i))
    nVal = eval('lsb' + trans(i))
    With thisform.pageframe1.page1.container4.label&tt as Label
        .Caption = trans((nVal)
        .refresh()
        .visible = !(.Caption='0')
        .backcolor = Icase(nVal>10,0xff, nVal>5,0xff0000, 0xc0c0c0)    && 根据值改背景色
    EndWith
ENDIF

我已经改好了感谢!
2023-04-21 13:33
东海ECS
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:Python
等 级:版主
威 望:32
帖 子:412
专家分:1646
注 册:2023-1-24
收藏
得分:0 
您的程序里面定义的 lsb1,lsb2,lsb3 ... lsb10 只是局部变量,只能在程序执行的时候使用,不能在表单中直接引用。因此,如果您在表单中需要使用这些变量,您需要在程序中将这些变量声明为公共变量或者全局变量。声明方法如下:

PUBLIC lsb1, lsb2, lsb3, lsb4, lsb5, lsb6, lsb7, lsb8, lsb9, lsb10


或者:

GLOBAL lsb1, lsb2, lsb3, lsb4, lsb5, lsb6, lsb7, lsb8, lsb9, lsb10

如果您采用公共变量的方式声明变量,那么这些变量只能在同一应用程序中的不同对象之间共享。如果您采用全局变量的方式声明变量,那么这些变量可以在应用程序的任意对象中使用。

在表单中使用这些变量时,您可以使用下面这样的代码:

FOR i=1 TO 10
    strLsb = 'lsb' + ALLTRIM(STR(i))
    thisform.pageframe1.page1.container4.label&tt..Caption = &strLsb
ENDFOR

这样,您就可以在表单中使用局部变量 strLsb 引用程序中的全局变量了。




会当凌绝顶,一览众山小.
2023-04-21 22:06
快速回复:问个小问题,请教这个怎么解决
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019455 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved