| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2458 人关注过本帖
标题:这个算动态吗?
取消只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用bccn201203在2012-9-23 20:57:46的发言:

原来如此 还没用过那个。。。

梅尚程荀
马谭杨奚







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

用途不明显,但作为练习,可以了。有些做法走了弯路,不过那是你不熟悉的关系。

那些做法 是弯的? 求解 求解!

梅尚程荀
马谭杨奚







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

开发的程序是提供给用户使用的,不管你是用可视化方式开发还是直接用代码生成界面,最后给用户的结果都是相同的,仅仅编程者的方式不同而已,但从开发效率来说就大不一样了。

是啊拖控件 很快的

梅尚程荀
马谭杨奚







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

改变控件的属性,不必全靠Init事件做,随时都可以的,而且即时生效,动态变化。比如改变宽度,在需要的时候给控件对象的.Width赋值就可以了。你现在是用参数初始化控件,不必借助自定义属性,也不必总在Init时做。数据驱动程序,是适应于外部数据源的,不在设计时指定,也无法指定。数据放在程序之外,是为了不必反复编译程序和再发布,适应性强。界面在设计时定死了,当然很好实现,只是看你的程序需求是否这种环境。

举个例子:你要设计10个按钮,其中4个是红色的,4个是绿色的,2个是蓝色的。如果用拖拉控件,就分别设置10个赋值;如果用代码驱动,就用一个DO CASE分批设置;如果用数据驱动,就只用一个循环。当要变化其中某些按钮的颜色时,你看哪种最方便?

我怎么感觉还是循环方便 只要设定按钮的ID 然后用if语句 和 inlist()函数来个相应ID的按钮设置颜色就行吧 。

梅尚程荀
马谭杨奚







                                                       
2012-09-23 21:33
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 26楼 TonyDeng
老大 现在出现一个重大问题 哇 简直是天大的问题
这个问题 可以击溃我前面所有努力建立的架构

如下程序
程序代码:
Clear All
Main()

Procedure Main()
    Local lo_MainForm
    lo_MainForm = NewObject("C_Form")
    lo_MainForm.Show
    Read Events
    Return
EndProc

Define Class C_Form as Form
    Width = 400
    Height = 400
    AutoCenter = .T.
    Caption = "Experiment"
  
    Procedure Init
        With This
            .AddObject("xx", "CommandButton")
            With this.xx
                .Top = 100
                .Left = 100
                .Height = 50
                .Width = 100
                .Caption = "XXbtn"
                .Visible = .T.
            EndWith
        EndWith
    EndProc   

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

        Clear Events
    EndProc

EndDefine
编译器会提示他认不到XX..........
图片附件: 游客没有浏览图片的权限,请 登录注册


也就是说在Form的Init事件里 通过.addObject()函数 添加的对象 在 Form中无法实现它的click 事件。。。。
那我写的那个N多命令按钮不是作废了?

梅尚程荀
马谭杨奚







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

看19楼:
https://bbs.bccn.net/viewthread.php?tid=381931&extra=&page=2

老大 你是提醒我在自定义类里就把他所拥有的控件的事件都写了? 是不是啊?

梅尚程荀
马谭杨奚







                                                       
2012-09-23 21:51
有容就大
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
有容就大
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
有容就大
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
快速回复:这个算动态吗?
数据加载中...
 
   



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

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