| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1125 人关注过本帖, 2 人收藏
标题:VFP 学习、开发漫谈 (21)
只看楼主 加入收藏
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
结帖率:96.88%
收藏(2)
已结贴  问题点数:20 回复次数:8 
VFP 学习、开发漫谈 (21)
最近一段时间,因单位工作繁忙,“开发、漫谈”已经好久未更新了。近日,获悉本人升任“版主”,这既是一份荣誉,又代表着一份责任。忙里愉闲,正好今天有点时间,就几个小问题给大伙儿聊几句。

问题一,记得在阅读有关 VFP 6.0 的资料时,书中提到一个小技巧:在“工具”-“选项”对话框中,按下 Shift 键不放,单击“确定”按钮,即可将对应的 SET 命令与系统变量输出到命令窗口中。

但是,在 VFP 9.0 下,打开“Option”对话框,按下 Shift 键的同时,单击“OK”按钮,你会发现在 Command 窗口中却什么也不显示。难道在 VFP 9.0 下,这项“绝招儿”不灵了?非也,你只需按照如下步骤操作:

1. 选择菜单“Tools”-“Debugger”,打开调试器,并保证 Debug Output 窗口处于打开状态(默认是打开的)。
2. 切换回 VFP 窗口,选择菜单“Tools”-“Option”,打开选项窗口。
3. 按下 Shift 键不松开,单击“OK”按钮。
4. 切换到 Debugger 窗口,你会发现:与选项对话框相对应的 Set 命令和系统变量均输出到了 Debug Output 窗口中了。

问题二,我们都知道,VFP 设置系统默认路径的命令是 Set Default To <路径>。按照我们的理解,要获取默认路径,应该采用 Set("Default")。因为,一般情况下 Set 命令与 Set()函数是对应的,前者用于设置系统状态,后者用于返回系统状态。但是,当你输入 ? Set("Default")时,你会发现:系统返回的不是默认路径,而是默认驱动器,如:“C:”。那么,如何才能返回默认路径呢?相信大多数用户都知道:采用 SYS(3)+SYS(2005)。不过,这里我再教你一招儿:使用 Set("Directory")。令人奇怪的是,在 VFP 的帮助文件中,竟没有查到有关这个函数的任何信息。不信,各位可以在命令窗口中,输入 Help Set(),查看列表中是否有 Directory。

问题三,要使递增框(Spinner)每次递增 0.001,当在 Increment 中输入 0.001 时,系统会自动变为 0.00,也就是说,系统只能保留 2 位小数。怎样才能输入多位小数呢?答案是:在 Increment 框中输入 =0.001,即:在值的前面输入一个等号。另外,还有一个更重要的问题:当 Increment 的小数位大于 Value 中的小数位时,会造成控件的显示值与实际值不符。比如:设置 Increment = 0.5,Value = 0,运行时,单击向上递增按钮,则 Spinner 显示为 1,但其 Value 却还是 0。这会带来严重的问题。因此,必须牢记:Increment 的小数位必须小于或等于 Value 的小数位。

问题四,列表框的 RowSourceType = 0,如何将内容添加到第 2 列?

若在列表框的 Init 事件中输入:
    THIS.AddItem('选项11',1,1)
    THIS.AddItem('选项12',1,2)
运行结果如下:
图片附件: 游客没有浏览图片的权限,请 登录注册

我们发现,“选项12”没有出现在第一行第二列,而是出现在第二行的第二列。
正确的处理方法有两种:
方法一:
    THIS.AddItem('选项11')
    THIS.List(THIS.NewIndex,2) = '选项12'
方法二:
    THIS.AddItem('选项11')
    THIS.AddListItem('选项12',THIS.NewIndex,2)

问题五,列表框的 RowSourceType = 0,如何使用一个 AddItem() 添加多个列表项?
答:在列表框的 Init 事件中,输入:THIS.AddItem('选项01\;选项02\;选项03'),可一次性添加“选项01”、“选项02”、“选项03”三个列表项。

问题六,如何在列表框中添加分隔线?
答:与在菜单中添加分隔线的方法相似,THIS.AddItem('\-')。
   
问题七,如何禁用列表框中的某个列表项?
答:在列表项前加反斜线和右方括号(\]),如:在一个命令按钮的 Click 事件中输入:THISFORM.List1.List[2] = '\]'+THISFORM.List1.List[2] 可禁用列表框的第 2 项。列表框的第 2 项将显示为灰色,并且无法用鼠标和键盘选定。

问题八,“开发、漫谈(八)”对控件操作进行了总结。其中,遗漏了一点,补充如下:
比如,选择多个控件后,单击布局工具栏上的“Same Width(相同宽度)”,默认是将所有控件的宽度设定为其中最宽的控件的宽度。若按下 Ctrl键,单击“Same Width”按钮,则是将所有控件的宽度设定为其中最窄的控件的宽度。也就是说,按下 Ctrl 键,可以做“相反”操作。其他如“Same Height(相同高度)”、“Same Size(相同尺寸)”按钮与此相同。

问题九,在“开发、漫谈(二)”中,提到 TRIM()函数不仅可过滤尾部空格,也可以过滤掉其他字符。最近,在编写代码时就发现了它的妙用,列举 2 个例子。

例 1:将日期变量 dNow(存储的值为 2014.05.10)转化为 5.10,仅保留月份和天数,且去除月份前面的 0

    ? LTRIM(RIGHT(DTOC(dNow),5),'0')
   
    上述代码中,使用 LTRIM()函数过滤掉了月份中的 0

例 2:将数值转化为字符串,要求:0 或0.00 转化成空串;5.00 转化成 5;5.10 转化成 5.1
程序代码:
FUNCTION Ntoc(nValue)            && nValue(要转换的数值)
    LOCAL cRet
    DO CASE
    CASE nValue = 0              &&0 时返回空串
        cRet = ''
    CASE INT(nValue) = nValue    && 为整数时不保留小数位
        cRet = TRAN(nValue)
    OTHERWISE                    && 有小数时不保留小数位右侧的 0
        cRet = TRIM(TRAN(nValue),'0')
    ENDCASE
    RETURN cRet
ENDFUNC
在上述代码中,使用 TRIM()函数去掉了小数点右边的无效 0,十分简洁。若采用代码,需放在一个循环中逐个字符去检测,十分繁琐。
该函数可用于表格中,用来显示数值型数据,以节约列宽。比如,在我开发的进销存系统中,去税单价设置了 6 位小数,若不采用该函数,则小数点后面的 0 非常影响视觉体验。

[ 本帖最后由 liuxingang28 于 2014-5-13 15:41 编辑 ]
收到的鲜花
  • tlliqi2014-05-13 21:44 送鲜花  30朵   附言:学习
搜索更多相关主题的帖子: 资料 开发 对话框 小技巧 
2014-05-13 15:32
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:5 
细节决定成败。很多困扰编程者的问题往往是某个细节没有注意到。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2014-05-13 17:09
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:5 
学习
2014-05-13 21:44
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:5 
很好,学习中……,谢谢!

只求每天有一丁点儿的进步就可以了
2014-05-14 11:08
tsg2005
Rank: 1
等 级:新手上路
帖 子:8
专家分:9
注 册:2012-3-24
收藏
得分:5 
受益匪浅啊。
2014-05-14 19:32
asdf_123000
Rank: 4
等 级:业余侠客
威 望:1
帖 子:273
专家分:227
注 册:2012-12-20
收藏
得分:0 
细节决定好坏

越学越好
2014-05-17 13:10
ILoveVFD
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:218
专家分:147
注 册:2015-5-2
收藏
得分:0 
篇篇精彩!
2015-05-02 12:09
Littlebeezkz
Rank: 1
等 级:新手上路
威 望:1
帖 子:10
专家分:0
注 册:2015-7-12
收藏
得分:0 
这样的程序代码!拿得出来。我编的管用,就事论事,不精简
2015-08-02 16:55
aqyejun
Rank: 4
等 级:贵宾
威 望:10
帖 子:147
专家分:113
注 册:2010-6-11
收藏
得分:0 

【独叶为舟】工作室
2024-07-25 08:44
快速回复:VFP 学习、开发漫谈 (21)
数据加载中...
 
   



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

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