| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2458 人关注过本帖
标题:这个算动态吗?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用有容就大在2012-9-23 22:19:42的发言:

而且发现BindEvent()的一个不足就是把命令按钮的CLICK托管到Form后 只要在Form上任意一点点击都将实现点击结果。。。。
这个。。这个。。

把那个Click事件换成别的自定义名字,不用内置的事件名字也可以。

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


把那个Click事件换成别的自定义名字,不用内置的事件名字也可以。

是这样吧 哈哈 效果不错。。
程序代码:
        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
                            Do case
                                Case  This.Key.ID == "Number"
                                BindEvent(.Ctnr_Button, "Click", This, "Click_Number")
                            EndCase
                           EndIf                         
                           .SetAll("Visible", .T.)
                           .SetAll("FontSize", 16)
                           .SetAll("Alignment", 2) 
                           .SetAll("FontBold", 1)
                           .Height = .Key.chg_Height       
            EndWith
        EndProc    
       
        Procedure Click_Number
            MessageBox("Hhahaha")
        EndProc

加强了下 效果很好 老大 敬茶

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

梅尚程荀
马谭杨奚







                                                       
2012-09-23 22:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你34楼的写法不用那样的,像我33楼那样就可以,不用总用BindEvent(),那是特殊情况下才用的。

授人以渔,不授人以鱼。
2012-09-23 22:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
BindEvent()这种,就是C#的委托语法。

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

你34楼的写法不用那样的,像我33楼那样就可以,不用总用BindEvent(),那是特殊情况下才用的。

问题是我先自定义一个容器类 里面用addObject()分别添加了一个 Label 一个 TextBox 一个 CommandButton
然后才在MainForm里 又用循环addObject()了8个自定义容器类对象
如果直接在Form里 Add Object XXX As OOO with .....
那么就要add 3 * 8 = 24个对象。。。

梅尚程荀
马谭杨奚







                                                       
2012-09-23 22:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在自定义容器中固定3个控件,从这个类派生8个实例对象,每个对象都天生带3个控件,亦即24个控件。

你要明白,类是设计代码,这个类设计时就设计它容纳3个控件,这是这个类的固有表现,用类生成对象,就按类定义的模板出实物。类是设计蓝图,对象是实物。除非类设计本身就不确定有多少控件,才用AddObject()动态创建对象,否则,直接在图纸上安排模型就可以了。

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

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

在自定义容器中固定3个控件,从这个类派生8个实例对象,每个对象都天生带3个控件,亦即24个控件。

那这样 如果要改变容器里面的某控件大小的时候 就要额外的写init代码 24个要改变10个以上就很繁琐了吧
如果还要移除某个控件 又要额外写removeObject代码 如果在移除的地方在添加一个不一样的控件又要写代码
那我还不如用数组参数直接传算了。。。

梅尚程荀
马谭杨奚







                                                       
2012-09-23 22:41
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


老大 这个ADD OBJCET 能用结构体数组做参数传吗? 后面那个With cPropertyList 能写成With ga_Struct[i]吗?

梅尚程荀
马谭杨奚







                                                       
2012-09-23 22:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
DEFINE CLASS C_Form AS Form

    PROCEDURE Init
        FOR i = 1 TO 8
            lc_Name = "xx" + TRANSFORM(i)
            ThisForm.AddObject(lc_Name, "myClass")
            WITH ThisForm.&lc_Name
                .Label1.Caption = "Caption + " + TRANSFORM(i)
                .Height = 20 + 5 * (i - 1)
                .Width = 200
                .Visible = .T.
                .Resize
            ENDWITH
            IF i == 2
                BindEvent(ThisForm.&lc_Name..Label1, "Click", This, "Click1")
            ENDIF
        NEXT
    ENDPROC

    PROCEDURE Click1
        ThisForm.xx.Label1.Caption = "bbb"
    ENDPROC

ENDDEFINE

DEFINE CLASS myClass AS Container
   
    ADD OBJECT Label1 AS Label WITH Caption = "aaa"
    ADD Object TextBox1 AS TextBox

    PROCEDURE Resize
        WITH This
            .SetAll("Height", .Height)
        ENDWITH
    ENDPROC

    PROCEDURE TextBox1.Valid
        IF EMPTY(This.Value)
            RETURN .F.
        ENDIF
    ENDPROC

ENDDEFINE


没运行,其余的你自己修改测试一下。

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

授人以渔,不授人以鱼。
2012-09-23 22:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 48楼 有容就大
用自定义属性接收结构体参数

授人以渔,不授人以鱼。
2012-09-23 22:56
快速回复:这个算动态吗?
数据加载中...
 
   



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

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