| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2458 人关注过本帖
标题:这个算动态吗?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是的,这是兼容性的写法。不用自定义类的时候,就必须用BindEvent()把特定对象的事件代码委托到别的对象中去。
程序代码:
Define Class C_Form as Form
    Width = 400
    Height = 400
    AutoCenter = .T.
    Caption = "Experiment"

 
    Procedure Init
        With This
            .AddObject("xx", "CommandButton")
            With .xx
                .Top = 100
                .Left = 100
                .Height = 50
                .Width = 100
                .Caption = "XXbtn"
                .Visible = .T.
            EndWith
            BindEvent(.xx, "Click", This, "Click")
        EndWith
    EndProc   

    Procedure Click
        MessageBox("阿弥陀佛")
    EndProc

 
    Procedure destroy

        Clear Events
    EndProc

EndDefine

授人以渔,不授人以鱼。
2012-09-23 21:54
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用TonyDeng在2012-9-23 21:54:24的发言:

是的,这是兼容性的写法。不用自定义类的时候,就必须用BindEvent()把特定对象的事件代码委托到别的对象中去。
 
Define Class C_Form as Form
    Width = 400
    Height = 400
    AutoCenter = .T.
    Caption = "Experiment"
  
    Procedure Init
        With This
            .AddObject("xx", "CommandButton")
            With .xx
                .Top = 100
                .Left = 100
                .Height = 50
                .Width = 100
                .Caption = "XXbtn"
                .Visible = .T.
            EndWith
            BindEvent(.xx, "Click", This, "Click")
        EndWith
    EndProc   
 
    Procedure Click
        MessageBox("阿弥陀佛")
    EndProc
  
    Procedure destroy
 
        Clear Events
    EndProc
 
EndDefine

哇 还有这一招

梅尚程荀
马谭杨奚







                                                       
2012-09-23 21:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你这个代码,与下面的等价:

程序代码:
Define Class C_Form as Form
    Width = 400
    Height = 400
    AutoCenter = .T.
    Caption = "Experiment"
  
   Add Object xx AS CommandButton With Top = 100, Left = 100, Height = 50, Width = 100, Caption = "XXbtn"   

    Procedure xx.Click
        MessageBox("阿弥陀佛")
    EndProc 

    Procedure destroy
        Clear Events
    EndProc 

EndDefine

这是最原始的写法,它即是用表单设计器拖出一个CommandButton控件,分别赋值、并填写Click事件代码的过程。在我看来,挥舞鼠标点那么多下并按键盘,还不如写这几行代码来得行云流水。

[ 本帖最后由 TonyDeng 于 2012-9-23 22:07 编辑 ]

授人以渔,不授人以鱼。
2012-09-23 22:01
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
不过试了下 貌似 自定义类用这个行不通?
程序代码:
Define Class C_Container as Container
            BorderWidth = 2
            SpecialEffect = 1
            Width = 2 * (gn_HalfWndWidth - gn_Space)
            Key = ""                   
            Procedure Init(t_Ctnr)
                Local ln_Space as Integer
                ln_Space = 20
            With This
                .Key = t_Ctnr
                .AddObject("Ctnr_Label","Label")
                With This.Ctnr_Label
                           .Caption = This.Key.lbl_Caption
                          .Height = 30
                          .Width = 200
                          .Left = 10
                          .Top = This.Key.chg_Height / 2 - .Height / 2                                            
                           EndWith                             
                           .AddObject("Ctnr_Text","TextBox")
                With This.Ctnr_Text
                          .Left = This.Ctnr_Label.Left + This.Ctnr_Label.Width + ln_Space
                                .Height = This.Key.chg_Height
                                .Width = This.Key.chg_Width
                           EndWith                        
                           If  .Key.ask_Button == .T.
                           .AddObject("Ctnr_Button","CommandButton")
                    With This.Ctnr_Button
                          .Height = 30
                          .Caption = This.Key.btn_Caption
                          .Left = This.Ctnr_Text.Left + This.Ctnr_Text.Width + ln_Space
                          .Top = This.Key.chg_Height / 2 - .Height / 2                            
                          .Width = 100                                
                    EndWith  
                           EndIf                        
                           .SetAll("Visible", .T.)
                           .SetAll("FontSize", 16)
                           .SetAll("Alignment", 2)
                           .SetAll("FontBold", 1)
                           .Height = .Key.chg_Height
                     BindEvent(.Ctnr_Button, "Click", This, "Click")                                                  
            EndWith
        EndProc   
      
        Procedure Click
            MessageBox("Hhahaha")
        EndProc                                                                                                            
EndDefine 

改成
  Procedure Ctnr_Button.Click
            MessageBox("Hhahaha")
  EndProc   
去掉和不去掉BindEvent(.Ctnr_Button, "Click", This, "Click")    都不行?


梅尚程荀
马谭杨奚







                                                       
2012-09-23 22:07
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用TonyDeng在2012-9-23 22:01:59的发言:

你这个代码,与下面的等价:

 
Define Class C_Form as Form
    Width = 400
    Height = 400
    AutoCenter = .T.
    Caption = "Experiment"
   
   Add Object xx AS CommandButton With Top = 100, Left = 100, Height = 50, Width = 100, Caption = "XXbtn"   
 
    Procedure xx.Click
        MessageBox("阿弥陀佛")
    EndProc  
 
    Procedure destroy
        Clear Events
    EndProc  
 
EndDefine

这是最原始的写法,它即是用表单设计器拖出一个CommandButton控件,分别赋值、并填写Click事件代码的过程。在我看来,挥舞鼠标点那么多下并按键盘,还不如写这几行代码来得行云流水。

需要点不少下鼠标呢。。。

梅尚程荀
马谭杨奚







                                                       
2012-09-23 22:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你前面的代码是行的,不行就不知道你怎么弄的了。

授人以渔,不授人以鱼。
2012-09-23 22:13
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用TonyDeng在2012-9-23 22:13:48的发言:

你前面的代码是行的,不行就不知道你怎么弄的了。

那个系统自带的基类可以用BindEvent()是没问题的 但是我把他搬抄到自定义类里就不行了。。。
是不是自定义类 根本就不需要BindEvent()?

梅尚程荀
马谭杨奚







                                                       
2012-09-23 22:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
都可以,你不知道哪里不对劲而已。

授人以渔,不授人以鱼。
2012-09-23 22:18
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
而且发现BindEvent()的一个不足就是把命令按钮的CLICK托管到Form后 只要在Form上任意一点点击都将实现点击结果。。。。
这个。。这个。。

梅尚程荀
马谭杨奚







                                                       
2012-09-23 22:19
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用TonyDeng在2012-9-23 22:18:23的发言:

都可以,你不知道哪里不对劲而已。

那再去试试。。。

原来要放到IF --ENDIF 中间


[ 本帖最后由 有容就大 于 2012-9-23 22:22 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-09-23 22:20
快速回复:这个算动态吗?
数据加载中...
 
   



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

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