非常感谢各位大侠的关注!
我的text里是个日期型的值,由date time picker为其赋值。重置后被程序置为空,显示为“ - - ”这种样式。我现在需要的就是这时当我点击text时,text的值变为“”这样的空值(字符型?),失去焦点时又回到日期型空值“ - - ”。而且我是将text和date time picker两个控件放在Container里做为一个类的。
不知问题是不是表述清楚了?代码如下:
1、date time picker的change的代码:this.Parent.txt日期.Value=TTOD(this._Value)
2、text的clik代码:this.SelectOnEntry=.F.
3、text的gotfocus代码:this.SelectOnEntry=.T.
If !Empty(This.Value) && 如果非空,得到焦点时将日期型转换为yyyymmdd格式字符串。
This.Value=DtoS(This.Value)
Else
This.Value=""
Endif
4、text的lostfocus代码:This.SelectOnEntry=.T.
If !Empty(This.Value)
This.Value=Ctod(Left(This.Value,4)+"-"+;
SUBSTR(This.Value,5,2)+"-"+Substr(This.Value,7,2)) && 失去焦点时,将字符型日期转换为日期型
Else
This.Value=CtoD("--")
Endif
5、text的mousedown代码:If This.SelectOnEntry
Nodefault
ENDIF
6、text的init代码:this.Value=CTOD("--")
7、text的programmaticchange代码:If Empty(This.Value) && 被保存后的复位指令置空、且焦点不在此时的处理。
This.Value=Ctod("--")
Endif
问题就在最后一个代码里,text被置空,得到焦点时,我想让text不再显示“ - - ”,而是显示为“”,可以直接输入8位日期值,不知有没有更好的办法?如果在gotfocus事件中设置一标志变量,到text的programmaticchange中时,该变量总会提示“找不到”,不知是不是因为被封装为类在关系?所以总不成功。
另外不解的是,我在gotfocus中已经有This.Value=""这样的代码了,为什么经过programmaticchange之后,当text中的值为Ctod("--")时,text得到焦点时却不能显示为“”这样的空值?存在逻辑矛盾?
请大侠指教!
再补充一下:因为我的表单里有大量的日期,每次“保存”操作后,需要将日期全部置空,我用的是setall.所以需要在programmaticchange中将其转换为日期型空值。也就是在这种情形下,出现了gotfocus中This.Value=""不执行的问题。我尝试在programmaticchange中放置This.Value=""指令,通过设置一标志变量偶尔可以实现,但变量似乎在类中不能很好传递。所以我想如果在programmaticchange中加这样的判断:
if Empty(This.Value)
if text得到焦点
This.Value=""
else
This.Value=Ctod("--")
endif
endif
“text得到焦点”这个条件不知怎么实现。啰嗦一大堆,就是希望把我遇到的问题表述清楚 ^_^ 也许有很简洁的方法可以实现?
[
本帖最后由 ffyy 于 2012-1-17 08:27 编辑 ]