【问题标题】:Programmatically fire button click event以编程方式触发按钮单击事件
【发布时间】:2014-07-23 18:26:32
【问题描述】:

有没有办法在 Clarion 中以编程方式触发按钮单击事件?我尝试了以下方法,但没有奏效:

! Doesn't work:
?ResetInput

! Also doesn't work:
?ResetInput:Accepted

【问题讨论】:

    标签: events clarion


    【解决方案1】:

    经过几个小时的搜索,我想出了一个解决方案:

    POST(EVENT:Accepted, ?ResetInput)
    

    如果有更正确的方法,请发布任何其他答案。


    以下是 Clarion 帮助文档中有关 POST 功能的信息:

    POST(事件 [,控制] [,线程] [,位置 em>])

    event:包含事件编号的整数常量、变量、表达式或 EQUATE。 400h 到 0FFFh 范围内的值是用户定义的事件。

    控件:包含受事件影响的控件的字段编号的整数常量、EQUATE、变量或表达式。如果省略,则事件与字段无关。

    thread:一个整数常量、EQUATE、变量或表达式,包含执行线程号,其 ACCEPT 循环将处理事件。如果省略,则将事件发布到当前线程。

    位置:整数常量、EQUATE、变量或包含零 (0) 或一 (1) 的表达式。如果为一 (1),则事件消息被放置在事件消息队列的前面。如果省略或为零 (0),则事件消息将放在事件消息队列的末尾。

    POST 将事件发布到指定线程的当前活动的 ACCEPT 循环。这可能是用户定义的事件或任何其他事件。用户定义的事件编号可以定义为 400h 和 0FFFh 之间的任何整数。任何带有指定控件的事件都是特定于字段的事件,而没有指定控件的事件是与字段无关的事件。

    发布事件会导致 ACCEPT 循环触发,但不会导致事件“发生”。例如,POST(EVENT:Selected,?MyControl) 为 ?MyControl 执行 EVENT:Selected 中的任何代码,但不会导致 ?MyControl 获得焦点。

    例子:

    Win1 WINDOW('Tools'),AT(156,46,32,28),TOOLBOX
        BUTTON('Date'),AT(0,0,,),USE(?Button1)
        BUTTON('Time'),AT(0,14,,),USE(?Button2)
    END
    
    CODE
        OPEN(Win1)
        ACCEPT
    
        ! Detect user-defined event:        
        IF EVENT() = EVENT:User THEN BREAK END
    
        CASE ACCEPTED()
        OF ?Button1
            POST(EVENT:User,,UseToolsThread)  !Post field-independent event to other thread
        OF ?Button2
            POST(EVENT:User) ! Post field-independent event to this thread
        END
    END
    
    CLOSE(Win1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2013-10-09
      相关资源
      最近更新 更多