| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 436 人关注过本帖
标题:[求助]表头CLICK事件应该在类里如何定义?
只看楼主 加入收藏
zeren
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-9-10
结帖率:0
收藏
 问题点数:0 回复次数:2 
[求助]表头CLICK事件应该在类里如何定义?
我想以编程方式定义第二列表头的CLICK事件,不知在类里应该怎么写?
程序代码:
DEFINE CLASS gridclass1 AS grid

    PROCEDURE Init

        Thisform.Refresh
    ENDPROC

 ******************************  写在这里?如何写?
    PROCEDURE .column2.header1.Click
        SELECT distinct 回退原因 FROM Test INTO ARRAY temparray
        *!*    MESSAGEBOX(ALLTRIM(STR(ALen(temparray)))+ALLTRIM(STR(RECCOUNT())))
        IF ALen(temparray)<RECCOUNT()
        this.column2.header1.ForeColor=RGB(255,0,0)
        MESSAGEBOX('校验未通过'+CHR(13)+CHR(13)+'您的派车有重复',16,'警告')
        else
        this.column2.header1.ForeColor=RGB(0,0,0)
        MESSAGEBOX('校验通过'+CHR(13)+CHR(13)+'您的派车无重复',64,'提示')
        ENDIF
    ENDPROC
*********************************   
    PROCEDURE AfterRowColChange
        LPARAMETERS nColIndex
        *!*    thisform.grdtest.Refresh
        thisform.Refresh&&为了同步刷新
    ENDPROC

ENDDEFINE
搜索更多相关主题的帖子: 如何 
2014-01-18 21:32
zeren
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-9-10
收藏
得分:0 
已解决。用以下函数:

BINDEVENT() 函数请参阅
Functions | Visual FoxPro 对象的事件绑定 | UNBINDEVENTS() 函数 | RAISEEVENT() 函数 | AEVENTS() 函数[该主题是 beta 版的一部分并将在今后的版本中修改. 空的主题包含了一个占位符.]
发送该主题的返馈到微软
可以用 BINDEVENT() 来绑定事件, 属性或方法从 Visual FoxPro 自己的对象到其它 Visual FoxPro 对象。要从 Component Object Model (COM) 对象绑定事件, 用 EVENTHANDLER() 函数。
BINDEVENT(oEventSource, cEvent, oEventHandler, cDelegate [, nFlags])
参数
oEventSource
指定事件源, 它必须是一个有效的 Visual FoxPro 对象。
cEvent
指定你想绑定的事件, 方法或属性的名字。
oEventHandler
指定对象, 必须是一个有效的 Visual FoxPro 对象, 处理事件。
cDelegate
指定方法, 或 "代理", 为 oEventHandler 处理事件。
nFlags
指定一个你可以为事件绑定操作设置的额外的位标记。 nFlags位描述
000执行事件代码前执行代理代码。(默认)
101执行代理代码前执行事件代码。
210当一个简单的方法调用发生时触发事件 (执行代理代码)。
3111在代理前执行事件代码。当简单的方法调用发生时触发事件。

1如果你用值为 3 的 nFlags, 由方法调用返回到事件的值不是那个事件, 而是调用最后的代理。事件在任何代理前被调用, 因此代理的返回值是堆栈上的保持值。因此, 建议代理方法包含与事件自己相同的返回值。在 Visual FoxPro 中, 一个没有明确 RETURN 语句的过程返回一个隐含的值真 (.T.)。这仅在假如事件被方法调用触发而不是通过一般的交互式模式或 RAISEEVENT() 调用时才是一个问题。
下表描述各个位的动作:
位描述
0ON - 调用事件代码在代理代码前。
OFF - 调用事件代码在代理代码之后。
1ON - 在简单方法调用发生时不调用代理代码。
OFF - 在简单方法调用发生时调用代理代码。

下表显示当位 0 是关, 并且位 1 是开或关时,是否引发一个事件:
事件类型位 0 关 (默认)位 1 开
交互式是是
编程方式是否
RAISEEVENT()是是

返回值
数值型. BINDEVENT() 返回对象的事件绑定数。
备注
可以绑定到任何有效的 Visual FoxPro 对象事件, 属性或方法, 包括 Access 和 Assign 方法。 但是, 事件和代理方法必须是公共的, 不是受保护和或隐藏的, 类的成员。当绑定到的事件有按引用传递的参数时要小心使用因为参数会改变。
当你绑定一个属性时, 你应该直接绑定到该属性而不是它的 Assign 方法。如果你直接绑定到 Assign 方法, 要注意到 Access 和 Assign 方法是标记不 Protected 并且在类的外部是不可见的。
注意   如果绑定到一个拥有 Assign 方法的属性, 代理方法会触发两次。第一次是属性的 assignment 调用产生的。第二次是在 Assign 方法中属性被传递的参数实际设置时发生的。代理方法应该注意到这种可能。
一般的继承规则是适用的。如果代理方法未包含任何代码, Visual FoxPro 上移到父层次中。
事件处理程序只在事件发生时调用。简单地调用一个方法不会触发事件, 除非你指定了 2 或 3 的 nFlags 值。
代理方法必须与 cEvent 中指定的事件具有相同的参数。可以调用 AEVENTS() 函数来获取一个对象引用到事件源中。如果代理方法没有足够的参数来处理事件传递的参数, Visual FoxPro 产生一条错误。
在默认情况下, Visual FoxPro 在事件之前调用代理方法。但是, 可以用 nFlags 设置来修改默认的行为。
如果你指定一个属性作为你要绑定的事件, Visual FoxPro 绑定该属性到一个隐含的 Assign 方法。当属性值改变时, Visual FoxPro 触发一个事件。
如果传递了一个不可用的参数, Visual FoxPro 产生一条错误, "函数参数的值、类型或数目无效。"。但是, 如果在绑定操作是发生问题, Visual FoxPro 不产生错误。你可以获取 BINDEVENT() 的返回值来检查绑定数。
特定的控件事件诸如 GotFocus, LostFocus, InteractiveChange, ProgrammaticChange 等等, 要求设置 nFlags 参数的第二个位, 如, nFlags = 2。这些事件在内部被 Visual FoxPro 作为方法调用来处理, 虽然它们被认为是事件。相同的行为适用于表单上的对象的 Refresh 方法, 它们调用表单的 Refresh 方法时被调用。特定的事件如 When 和 Valid 也要求在事件中用代码来产生事件。
BINDEVENT() 不直接支持 Value 属性, 因为它被 Visual FoxPro 用特殊方法来处理。你需要用 InteractiveChange 和 ProgrammaticChange 事件来代替。
如果原始的事件包含一个 NODEFAULT 命令, Visual FoxPro 仍然处理事件, 因为可能代理方法先于事件被调用。NODEFAULT 俟适用于 Visual FoxPro 自身的事件。
如果你明确地重复调用 BINDEVENT(), Visual FoxPro 忽略调用但仍然返回对象的事件绑定数。即使当 nFlags 设置不同, Visual FoxPro 忽略一个重复的 BINDEVENT()。你必须用 UNBINDEVENTS() 来改变绑定设置。
示例
下面示例展示如何保持类浏览器的位置在 Visual FoxPro 桌面的左边, 进化论桌面如何重调大小。BINDEVENT() 用 oHandler  关联 _SCREEN 或 Visual FoxPro 桌面 的 Resize 事件, 它使用 myresize 作为它的代理。当 Resize 事件被触发时运行 myresize 代码。
程序代码:
PUBLIC oHandler
oHandler=NEWOBJECT("myhandler")
DO (_browser)
BINDEVENT(_SCREEN,"Resize",oHandler,"myresize")

DEFINE CLASS myhandler AS Session
   PROCEDURE myresize
   _obrowser.left = _SCREEN.Width - _obrowser.width
   RETURN
ENDDEFINE

 
2014-01-18 22:26
b土木丁口
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:264
专家分:189
注 册:2013-9-12
收藏
得分:0 
学习
2014-01-19 13:07
快速回复:[求助]表头CLICK事件应该在类里如何定义?
数据加载中...
 
   



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

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