| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3333 人关注过本帖
标题:请教:怎么实现将某一控件是否得到焦点做为一个判断条件?
取消只看楼主 加入收藏
ffyy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-12-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
请教:怎么实现将某一控件是否得到焦点做为一个判断条件?
我在操作textbox时需要用到下面的语句:
if empty(this.value) and ……(值为空且得到焦点)
请问“得到焦点”这样的条件该如何实现?
搜索更多相关主题的帖子: 焦点 如何 
2012-01-16 21:26
ffyy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-12-11
收藏
得分:0 
非常感谢各位大侠的关注!
我的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 编辑 ]
2012-01-17 08:01
ffyy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-12-11
收藏
得分:0 
回复 8楼 月光雪山
会提示找不到focused 这个属性啊。我用的是vfp9.
2012-01-17 08:42
ffyy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-12-11
收藏
得分:0 
再次感谢各位!
    因为某种需要,text的值无论是手工赋值还是程序赋值,当text得到焦点时,无论其内容是空还是有值,都要变成字符型;失去焦点时,变成日期型的。因为需要数据类型的来回变动。:(
    比如,当text为日期型空值时(显示为"    -  -  "这种格式)。在gotfocus中使其值置为字符型空值,但这似乎又会引起programmaticchange中置其为日期型空值的动作,以致于无法实现为text赋字型型空值的想法。

[ 本帖最后由 ffyy 于 2012-1-17 23:02 编辑 ]
2012-01-17 22:41
ffyy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-12-11
收藏
得分:0 
回复 14楼 TonyDeng
因为在程序里对表单中的很多textbox(有日期型也有字符型)置空,为了置空后保存数据时数据一致,引入了programmaticchange将text的字符型空值自动转换为日期型空值。如果没有这个,一切正常。一引入,就出现了text不能置字符型空值的问题。也许是我的设计有问题? 实在不行,我想返回去,把数据表中的日期型字段改为字符型,也许就没这些麻烦了吧。只是做为技术性问题,还是希望能有个解决之道。

[ 本帖最后由 ffyy 于 2012-1-17 23:45 编辑 ]
2012-01-17 23:40
ffyy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-12-11
收藏
得分:0 
回复 16楼 TonyDeng
谢谢!我原本是在保存时处理数据一致性的,但因为表单中text数量太多,有的是字符型 有的是日期型,处理起来繁琐,才想要在事件中处理的,而且我把这种处理封装成类,打算通用。看来我的方法偏了。。
2012-01-17 23:50
ffyy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-12-11
收藏
得分:0 
回复 18楼 TonyDeng
高人!
只是怎么给container加value呢?之前我试过,可是似乎只能给容器加一些方法之类的,无法加value.望指点!
2012-01-18 00:16
ffyy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-12-11
收藏
得分:0 
回复 20楼 TonyDeng
谢谢指点。我先捣鼓一下,如果不成,还得请教!
再次感谢热心帮助!
提前祝龙年快乐!祝所有的朋友龙年快乐!
2012-01-18 00:23
快速回复:请教:怎么实现将某一控件是否得到焦点做为一个判断条件?
数据加载中...
 
   



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

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