主题:如何限定日期的输入
thirdli
[专家分:0] 发布于 2009-10-14 16:00:00
文本框中如何限制日期的输入,不在某个日期内,就给出错提示
回复列表 (共6个回复)
沙发
martine [专家分:4950] 发布于 2009-10-14 16:40:00
valid
板凳
thirdli [专家分:0] 发布于 2009-10-14 22:47:00
文本框为日期格式,想限定输入时间范围,范围外的,提示出错,然后重新输入
我在文本框的valid事件里写入代码
aaa=ALLTRIM(dtoc(this.Value))
if EMPTY(aaa)=.t. or aaa=""
RETURN 1
else
IF aaa>"20090907" OR aaa <"19300101"
this.Value=CTOD("")
Messagebox('日期输入错误',16,'系统提示')
RETURN 0
ELSE
RETURN 1
ENDIF
ENDIF
结果空白的文本框也会提示我出错.无法离开出错文本框.
3 楼
Ilikefox [专家分:5770] 发布于 2009-10-14 23:37:00
先分析错误:
aaa=ALLTRIM(dtoc(this.Value)) &&这一句把文本框中的日期转为字符串
if EMPTY(aaa)=.t. or aaa="" &&这里做个毫无意义的判断,是错误的重点
RETURN 1
else
IF aaa>"20090907" OR aaa <"19300101"
this.Value=CTOD("") &&这里字符串转为日期,不如直接给{}
Messagebox('日期输入错误',16,'系统提示')
RETURN 0
ELSE
RETURN 1
ENDIF
ENDIF
为什么说上面第2句是做个毫无意义的判断,因为那个条件永远为.F.。
为什么说那个条件永远为.F.,因为aaa不可能为空。
为什么说aaa不可能为空,因为即便文本框是空白,dtoc(this.Value)都返回非空字符串" / / "。
改写如下:
aaa=this.Value
IF EMPTY(aaa)
RETURN 1
ELSE
IF aaa>{^2009/09/07} OR aaa <{^1930/01/01}
this.Value={}
Messagebox('日期输入错误',16,'系统提示')
RETURN 0
ELSE
RETURN 1
ENDIF
ENDIF
还可写为:
aaa=this.Value
IF NOT EMPTY(aaa)
IF aaa>{^2009/09/07} OR aaa <{^1930/01/01}
this.Value={}
Messagebox('日期输入错误',16,'系统提示')
RETURN 0
ENDIF
ENDIF
4 楼
sywzs [专家分:5650] 发布于 2009-10-15 06:13:00
改用日期控件,岂不省去很多麻烦。
5 楼
thirdli [专家分:0] 发布于 2009-10-15 07:00:00
多谢各位解答,还是自己对各个数据类型不熟悉,基础不牢啊^_^,总之解决了问题多谢多谢.
6 楼
dfwxj [专家分:270] 发布于 2009-10-16 01:15:00
1、文本框预置一个合法日期,如:date()、{^2009.10.15}、date(2009,10,15)
2、检查日期是否符合要求,这个工作在保存或要使用到这个日期时进行
if text1.value不符合我的要求
messagebox('日期不符合要求!',64,'信息')
thisform.text1.setfocus
retu
endi
我来回复