| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2738 人关注过本帖
标题:SetAll 方法中的Value的值为什么有时要用引号括起来?
只看楼主 加入收藏
软件服务
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:344
专家分:736
注 册:2011-12-23
收藏
得分:0 
我的就是简洁,TonyDeng的就是明了
如果还不明,暂时抄着用,只修改红色位置就可以了,用一段时间你就会明白了。
Form1.Grid1.SetAll("ForeColor", RGB(0, 255, 0), "Header")
oGrd.SetAll("DynamicBackColor", ;
             "IIF(RECNO()%2=0,RGB(255,255,0), RGB(255,255,255))", "Column")
2011-12-25 16:50
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用软件服务在2011-12-24 13:05:05的发言:

ForeColor 需要的是数值
DynamicBackColor 需要的是字符串
回复软件服务
如下的例子:

        &&将性别为女的记录以斜体显示
         oGrd.SetAll("DynamicFontItalic", "IIF(性别='女',.T.,.F.)", "Column")&&它计算结果是逻辑值,哪你作何种解释呢?
DynamicFontItalic属性
属性值
" lExpr "
指定一个计算结果为真(.T.)或假(.F.)的逻辑表达式。下表对这些值进行了说明。 lExpr 计算结果 说明
真 (.T.)
 字体样式是粗体、斜体、删除线或下划线。
 
假 (.F.)
 (默认值,除 DynamicFontBold 之外) 字体样式不是粗体、斜体、删除线或下划线
 
2011-12-26 21:30
软件服务
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:344
专家分:736
注 册:2011-12-23
收藏
得分:0 
所有“Dynamic....”都是要字符串, 都是用于Grid的列
FontItalic是要逻辑型
DynamicFontItalic是要逻辑型表达式, 不是说要逻辑型

你可以写成
DynamicFontItalic = ".T."
也可以写成
DynamicFontItalic = "1=1"
也可以写成
DynamicFontItalic = "1>0"
也可以写成
DynamicFontItalic = "IIF(.T., .T. , .F.)"
也可以写成
DynamicFontItalic = "IIF(1=1, .T. , .F.)"
也可以写成
DynamicFontItalic = "IIF(1>0, .T. , .F.)"

"IIF(1>0, .T. , .F.)"这样的引号括着的是表达式
2011-12-26 21:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
SetAll()方法,是一种循环赋值动作,当我们写SetAll("ForeColor", RGB())的时候,VFP马上执行此行中的RGB()函数,把语句改写成SetAll("ForeColor", 743433)这样的形式,这是一个死数,对象的全体ForeColor都用这个死数,此时可以这样写。但若SetAll("ForeColor", IIF()),那么VFP同样马上执行此时的IIF()函数,这并非我们需要的结果,我们要的是在对象实际运行时,根据当时的环境再求出IIF()的值,而不要现在来求,此时,就写"IIF()",那么,属性ForeColor只得到字符串,它在实际环境中起作用时,再求值,通常是根据当前数据表记录指针不同而变化,这个不是死数,所以写成字符串告知VFP不要这个时候运算——但在grid控件实际运行时,它的Column.DynamicForeColor是对当前记录起作用的,就会临时对属性的字符串执行宏求值运算,获得动态值,从而达到不同记录有不同颜色的效果。

事实上,写SetAll("ForeColor", "RGB()")也一样没问题,也会临时求值,只是总会得到同样的值而已,为了省事,直接赋死数可以节约运行时间。同样,不写"IIF()"而写IIF()也没问题,只是这时它是死数(用当前记录的实际数据求出,如果运算数据不存在就会报错)。也就是说,不是“必须”如何写的问题,而是你需要什么效果就怎么写的问题。属性会执行什么动作,由设计这个属性的代码决定,对DynamicForeColor属性来说,它就只要求得到字符串,自己进行宏计算,不要你事先运算好,是设计代码本身这样写的;若是ForeColor,这个属性不会做这样的动作,它就能接受RGB()返回的数值(对VFP来说,其实所有数据都是字符串,跟C#是一样的)。

[ 本帖最后由 TonyDeng 于 2011-12-26 22:39 编辑 ]

授人以渔,不授人以鱼。
2011-12-26 22:33
软件服务
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:344
专家分:736
注 册:2011-12-23
收藏
得分:0 
TonyDeng 总说得详尽明了, 分析透彻
2011-12-27 20:36
快速回复:SetAll 方法中的Value的值为什么有时要用引号括起来?
数据加载中...
 
   



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

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