回 帖 发 新 帖 刷新版面

主题:如何限定日期的输入

文本框中如何限制日期的输入,不在某个日期内,就给出错提示

回复列表 (共6个回复)

沙发


valid

板凳


文本框为日期格式,想限定输入时间范围,范围外的,提示出错,然后重新输入 
我在文本框的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 楼

先分析错误:

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 楼

改用日期控件,岂不省去很多麻烦。

5 楼

多谢各位解答,还是自己对各个数据类型不熟悉,基础不牢啊^_^,总之解决了问题多谢多谢.

6 楼

1、文本框预置一个合法日期,如:date()、{^2009.10.15}、date(2009,10,15)
2、检查日期是否符合要求,这个工作在保存或要使用到这个日期时进行

if text1.value不符合我的要求
messagebox('日期不符合要求!',64,'信息')
thisform.text1.setfocus
retu
endi

我来回复

您尚未登录,请登录后再回复。点此登录或注册