| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 814 人关注过本帖
标题:请教一下:不在类中而是在某事件代码中使用dodefault()有何意义?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
程序代码:
Form1 = CREATEOBJECT("_NewForm")    && 从_NewForm类生成窗体实例,可以分别从_Form和_NewForm派生窗体观察效果
Form1.Show                          && 呈现窗体
READ EVENTS                         && 启动事务处理
RETURN                              && 程序结束

* 从固有Form类派生一个自定义表单类
DEFINE CLASS _Form AS Form
   
    * 本类窗体的默认动作,设置标题文字为"TEST"
    PROCEDURE Init
        ThisForm.Caption = "TEST"
    ENDPROC
   
    * 关闭窗体时结束事务处理
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC
   
ENDDEFINE 

* 从_Form类再派生一个子类
DEFINE CLASS _NewForm AS _Form

    * 本Init事件将覆盖父类的同名方法
    PROCEDURE Init
        ThisForm.AutoCenter = .T.    && 从本类派生的窗体将会自动居中,不执行DODEFAULT()的话,只居中,留意标题文字
        DODEFAULT()                  && 调用父类默认代码,窗体除居中外,还设置标题文字为"TEST"
    ENDPROC
   
ENDDEFINE

授人以渔,不授人以鱼。
2013-01-26 15:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把上面代码的类_NewForm替换为这个:
程序代码:
DEFINE CLASS _NewForm AS _Form

    ADD OBJECT Text1 AS TextBox WITH Top = 5, Left = 5, Height = 25, Width = 200
   
    PROCEDURE Init
        ThisForm.AutoCenter = .T.
        DODEFAULT()
    ENDPROC
   
    PROCEDURE Text1.Keypress(tnKeyCode, tnShiftAltCtrl)
        NODEFAULT
        IF ISDIGIT(CHR(tnKeyCode))
            tnKeyCode = ASC('*')
        ENDIF
        DODEFAULT()
    ENDPROC
   
ENDDEFINE

授人以渔,不授人以鱼。
2013-01-26 15:55
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
多谢了,先粗略看了一下,有点头绪,准备明天仔细研究。
但如下加了粗的代码中DODEFAULT()起什么作用(Text1.Keypress()中的DODEFAULT())


上面代码的类_NewForm替换为这个:

程序代码:

DEFINE CLASS _NewForm AS _Form

    ADD OBJECT Text1 AS TextBox WITH Top = 5, Left = 5, Height = 25, Width = 200
   
    PROCEDURE Init
        ThisForm.AutoCenter = .T.
        DODEFAULT()
    ENDPROC
    PROCEDURE Text1.Keypress(tnKeyCode, tnShiftAltCtrl)
        NODEFAULT    &&这里作用是不要执行Keypress事件原有的默认事件给屏蔽了
        IF ISDIGIT(CHR(tnKeyCode))
            tnKeyCode = ASC('*')
        ENDIF
        DODEFAULT()   &&它这里的DODEFAULT()起什么作用?它去调用哪一个父类呢?
  ENDPROC
   ENDDEFINE
2013-01-26 20:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
调用TextBox类代码,就是原先按键时这种控件的默认动作,要把字符显示出来、接受编辑键等等。如果想知道有什么效果,把那些行分别注释掉,不同地组合来看看,就明白了。

[ 本帖最后由 TonyDeng 于 2013-1-26 20:54 编辑 ]

授人以渔,不授人以鱼。
2013-01-26 20:51
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
我已试出来了,就不知道它的理由。现在明白了,是不是恢复TextBox类的固有的一些东西。
网上介绍它也提到最后要加上这一句DoDefault(nKeyCode,nShiftAltCtrl) :
如果你需要在表单的TXT文本控件的 KeyPress 中再加入其他的代码,请注意要先写上
DoDefault(nKeyCode,nShiftAltCtrl)
然后写上其他你需要的代码,不然会因为写上了其他的代码而是类中的代码无法正确的继承下来!
而是类中的代码无法正确的继承下来!&这句话是不是指TextBox类的一些方法,属性等等,

[下面一段是网上介绍
当我们自定义了一个文本控件,比如叫TXT吧,那么在她的 KeyPress 事件中,写下如下代码:
 
if nKeyCode = 127 and this.SelStart = 0 and this.SelLength = 0
NoDefault
endif

需要注意的是:如果你需要在表单的TXT文本控件的 KeyPress 中再加入其他的代码,请注意要先写上
DoDefault(nKeyCode,nShiftAltCtrl)
然后写上其他你需要的代码,不然会因为写上了其他的代码而是类中的代码无法正确的继承下来!]
2013-01-26 21:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是的,你自己用上面的例子多变着法子琢磨就知道了。

授人以渔,不授人以鱼。
2013-01-26 21:47
快速回复:请教一下:不在类中而是在某事件代码中使用dodefault()有何意义?
数据加载中...
 
   



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

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