| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 814 人关注过本帖
标题:请教一下:不在类中而是在某事件代码中使用dodefault()有何意义?
取消只看楼主 加入收藏
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
结帖率:79.38%
收藏
已结贴  问题点数:20 回复次数:7 
请教一下:不在类中而是在某事件代码中使用dodefault()有何意义?
一般在类中子类去调用父类时用dodefault(),但有程序中在某个事件中用了dodefault(),括号内没有参数。它起到什么作用?
例1
在VFP中如何从数据表中获取一个字段的最大值
在添加记录时,某一个数据字段自动生成,就是在其最大值的基础上加1
首先定义一变量zmax,存放最大值
在表单的refresh事件中输入以下代码:
sele nj
i=recn()
calculate max(证书编号) to zmax
if zmax=0
zmax=210922000000
go bottom**激活表
else
go i**激活表
endif
在添加按钮的click事件中输入以下代码:
dodefault()
thisform.pageframe1.page1.txt姓名.setfocus
thisform.pageframe1.page1.txt证书编号.enabled=.f.
thisform.pageframe1.page3.txt证书编号.enabled=.f.
if this.caption='保存'**(保存和添加按钮为一个按钮)
thisform.pageframe1.page1.txt证书编号.value=zmax+1
*zmax=zmax+1
*this.refresh()
thisform.refresh() **一定要刷新表单
endif
例2。
图片的处理。在VFP中,可以利用备注型字段来进行图片的存贮,这一功能可以用来保存人员的像片。首先,在数据表中加入备注型字段,假设字段名是photo。然后,在表单中加入Image控件,名为Image1,加入命令按钮控件,Caption设为“更换图片”。
修改表单的Refresh方法程,代码如下所示:

LOCAL lcFile

IF FILE(Member.Photo)  && 检测图片文件是否存在
lcFile = Member.Photo
ELSE
lcFile = ''
ENDIF

Thisform.Image1.picture = lcFile  && 在表单控件中显示图片

DODEFAULT()  && 执行默认的Refresh方法程序

“更改图片”命令按钮的Click事件程序如下所示:

LOCAL lcFileName

lcFileName = GETPICT("BMP,JPG,GIF", This.Caption, "选择")

IF !EMPTY(lcFileName)
Thisform.Image1.picture = lcFileName
REPLACE member.photo WITH lcFileName
Thisform.Refresh()
例3
ID编号的自动生成。一种办法是用数据表保存下一次的ID编号,新建数据时读取该编号,并对该编号进行加一操作,做为下一次的ID编号进行保存。本人采用程序生成的办法,来直接生成新的ID编号,程序代码如下:

LOCAL lnNew_ID
lnNew_ID = 0

SELECT Member
GO BOTTOM  && 读取最末位记录的ID编号加1做为新ID

lnNew_ID = person_id + 1
LOCATE FOR person_id = lnNew_ID
DO WHILE !EOF()  && 对新ID进行检测,若重复则加1后再检测
lnNew_ID = lnNew_ID + 1
GO TOP
CONTINUE
ENDDO

DODEFAULT()  && 执行默认的新建操作
REPLACE person_id WITH lnNew_ID && 用新ID替换新记录的ID
Thisform.Refresh  && 刷新屏幕,显示新ID

搜索更多相关主题的帖子: bottom 数据表 最大值 
2013-01-24 18:05
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
上面例子中如果不写DODEFAULT()也可以吗?通常很少看到
2013-01-24 18:14
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
Click和Refresh之类,DODEFAULT() 可写可不写,哪么哪一些事件一定要写呢?请举一些常见的好吗?
2013-01-24 20:03
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
谢谢!有否用到keypress与init此简单的例子吗?
2013-01-24 21:22
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
好的,先谢了,静盼佳音
2013-01-24 21:44
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
好的,先谢了,最好分别举二个例子,并有代码的注释。要求过分了吧,静盼佳音!
2013-01-24 21:46
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
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
快速回复:请教一下:不在类中而是在某事件代码中使用dodefault()有何意义?
数据加载中...
 
   



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

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