| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1276 人关注过本帖
标题:有一个表单里面有一段代码看不懂,请教高手们
只看楼主 加入收藏
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
结帖率:79.38%
收藏
已结贴  问题点数:20 回复次数:10 
有一个表单里面有一段代码看不懂,请教高手们
向列表框中添加内容.rar (2.13 KB)

其中有一段代码是啥意思?
IF THISFORM.OkToLeave    &&这表示什么?
    RETURN .T.
ELSE
    THISFORM.OkToLeave = .T.  &&这又表示什么?

    RETURN 0
ENDIF

整段代码是啥意思?
搜索更多相关主题的帖子: 表单 
2011-10-15 11:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
那是作者自己建立的自定义属性,意义和用法他自己知道,你通查代码呗。

授人以渔,不授人以鱼。
2011-10-15 12:10
编程的乐趣
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:229
专家分:1027
注 册:2011-4-4
收藏
得分:0 
2011-10-15 12:45
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
查了一下,好象自定义属性,与此有关的代码在在text1对象,keypress 过程中与text1 valid过程中出现。至于干什么也看不懂,我想请教的下面判断语句的含义表示什么?
我已附上了源码,麻烦一下。
在text1对象,keypress 过程中
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode = 13 &&Enter
    IF !EMPTY(THIS.Value)
        THISFORM.list1.AddItem (THIS.Value)
    ENDIF
    THIS.Value = ""
    THISFORM.OkToLeave = .F.
ENDIF   
-------------------------------
text1 对象 valid过程中

IF THISFORM.OkToLeave    &&这条判断语句表示什么?
    RETURN .T.
ELSE
    THISFORM.OkToLeave = .T.  &&是不是给自定义属性重新赋值?
    RETURN 0       &&是不是表示不返回值?
ENDIF



[ 本帖最后由 sylknb 于 2011-10-15 15:54 编辑 ]
2011-10-15 15:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
那个属性OkToLeave是逻辑型的,在上面的Text1.Keypress中它根据某种条件设置为.T.(默认为.F.),那么在触发Text1.Valid事件时,就按照这个标志执行动作。
是的,后面那个是重新赋值。在Valid事件中,return 0则焦点无法离开本控件,强迫继续输入。
OkToLeave的字面意义,显然是允许离开(Ok则Leave)。

授人以渔,不授人以鱼。
2011-10-15 16:00
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
谢TonyDeng,现有的懂了,但还有2个??

1、Text1.Keypress事件与Text1.Valid事件二个事件发生先后是不是Text1.Valid事件先发生?
2。IF THISFORM.OkToLeave 这样判断语句表示形式有点不懂,一般 =条件,或函数,方法
2011-10-15 16:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
1.Keypress事件是当控件得到焦点(GotFocus)之后,发生键盘按键时触发。Valid事件是控件失去焦点时触发(比如默认按TAB键就会跳离当前TextBox对象),此时可执行合法性检验,确定是否真的允许控件失去焦点。Valid事件总在Keypress之后。但是若不按键,用鼠标点击别的控件,也可以触发Valid事件。张洪举书中有一个表格,列明各种事件的顺序,你可以看一看。

2.OkToLeave本身就是逻辑型数据,无需再判断OkToLeave == .F.,用它自己的真值就可以左右IF语句的流程了。给变量起名是很重要的,例如,命名一个变量finish,就已经是“结束”的意思,那么IF finish的语句是很清晰的,即“如果结束则……”,这个时候,finish的真值要按正常语义赋值,确实要结束,就赋值finish=.T.,否则finish=.F.。文字能表达的意思,就反映在代码上,不必多写注释。那种aa、mmm之类的变量命名习惯,最好改掉。

[ 本帖最后由 TonyDeng 于 2011-10-15 16:43 编辑 ]

授人以渔,不授人以鱼。
2011-10-15 16:40
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
受益非浅,真的不知道,对逻辑型数据变量起名有如此讲究。
那么整段的代码翻成中文意思是不是如下意思,有点绕口。
当 IF OkToLeave为.F.时 离开焦点,return T 为真(在valid事件中.T.离开了),否则重新赋值为。T。,RETIRN 0 没有离开。
2011-10-15 17:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
对变量名、函数名,起名都要讲究。张书中有介绍命名规范,不妨学习一下,虽然不是硬性规定的,但遵守了对你有好处,不必完全遵守,领会其中深意即可,那么自己也会创造一套自己习惯的命名习惯(在团体开发环境中,是要强制遵守命名规范的,不是外面的什么规范,总之是这个团队大家都愿意遵守的共同规范)。

它那段代码的意思是,“如果输入Ok则允许离开Leave”(这就是OkToLeave的字面意思,此时OkToLeave=.T.)。TextBox控件中允许离开的机制是Valid事件返回.T.(返回.F.是不允许离开的),return 0等效于return .F.。

TextBox控件中Valid的Return如果用整数n,有另外的意义:当n>0时,焦点向后(按容器中TabIndex顺序)移动,当n<0时,则向前移动,n=0是留在当前位置不移动。return 0与return .F.的区别,后者会出现一个wait窗口的出错信息,前者不会。

[ 本帖最后由 TonyDeng 于 2011-10-15 17:18 编辑 ]

授人以渔,不授人以鱼。
2011-10-15 17:12
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
喔原来如此,我弄糊涂了太呆了。顺便再请教一下,我从网上看到一文
用return可以返回一个值来控制焦点例:在文本框的valid事件中写下
If alltrim(this.value) < =’0’**这里的’0’表示什么?
Return .f.
endif
2011-10-15 17:32
快速回复:有一个表单里面有一段代码看不懂,请教高手们
数据加载中...
 
   



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

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