标题:请教:怎么实现将某一控件是否得到焦点做为一个判断条件?
只看楼主
ffyy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-12-11
结帖率:100%
已结贴  问题点数:20 回复次数:22 
请教:怎么实现将某一控件是否得到焦点做为一个判断条件?
我在操作textbox时需要用到下面的语句:
if empty(this.value) and ……(值为空且得到焦点)
请问“得到焦点”这样的条件该如何实现?
搜索更多相关主题的帖子: 焦点 如何 
2012-01-16 21:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:3 
這個需求比較另類,我想不出在什麼時候需要這樣做。印象中沒有內置的檢測手段,但可以做到,用外部變量記憶。不過竊以為不必如此的。

授人以渔,不授人以鱼。
2012-01-16 22:33
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:3 
gotfocus
2012-01-17 00:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
GotFocus()是事件,不能作檢測用途。

授人以渔,不授人以鱼。
2012-01-17 00:50
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
得分:3 
以下是引用ffyy在2012-1-16 21:26:41的发言:

我在操作textbox时需要用到下面的语句:
if empty(this.value) and ……(值为空且得到焦点)
请问“得到焦点”这样的条件该如何实现?


假设: 你这个textbox的控件名为 "text1", 则如下即可:

if empty(this.value) .and."text1"==lowe(thisform.ActiveControl.name)

2012-01-17 01:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
偶爾可以這樣,但不會總是成功的。窗體內有Container很常見,幾個Container裏面都有text1,也不奇怪。其實正規的做法是1樓的代碼在GotFocus事件中激活,引用前面那個this.value。

授人以渔,不授人以鱼。
2012-01-17 01:31
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
月光雪山
Rank: 2
等 级:论坛游民
威 望:4
帖 子:36
专家分:97
注 册:2012-1-10
得分:3 
this.focused==true
2012-01-17 08:35
ffyy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-12-11
得分:0 
回复 8楼 月光雪山
会提示找不到focused 这个属性啊。我用的是vfp9.
2012-01-17 08:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
沒有focused這個屬性。
想達到樓主的目的,要多設置一個控件,前後遮掩。不加控件,也可以加屬性。總之,為了切換,就必須有可供切換的備件。


[ 本帖最后由 TonyDeng 于 2012-1-17 14:41 编辑 ]

授人以渔,不授人以鱼。
2012-01-17 14:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-359746-1-1.html




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

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