| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1680 人关注过本帖
标题:发现一个比较尴尬的东西 求解释?
取消只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:20 回复次数:18 
发现一个比较尴尬的东西 求解释?
各位看几段代码先
程序代码:
Define Class xx as Container
    For i = 1 to 9
        Add Object oo as CommandButton With
        。。。。。
    EndFor
EndDefine 
报错: for循环不能直接用于类定义?。。。

程序代码:
Define Class xx as Container
     Procedure Init
        For i = 1 to 9
            Add Object oo as CommandButton With
            。。。。。
        EndFor
    EndProc
EndDefine 
报错: add object 不能用于过程中?。。。

我很想用一个循环来达到几个 ADD OBJECT XX AS OO 的效果 有什么折中的办法?
搜索更多相关主题的帖子: color 东西 
2012-09-24 11:22
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用bccn201203在2012-9-24 11:41:53的发言:

要加入变量
试试下面代码
对象名重名,错误是肯定的了

换了还是不行 当时忘写&了 我试验的程序是带&的。。
图片附件: 游客没有浏览图片的权限,请 登录注册


梅尚程荀
马谭杨奚







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

人家示范代码是写.AddObject(),你偏要别出心裁地写ADD OBJECT,看看分别在哪些地方使用的嘛。

我发现.AddObject()用于过程中能包含在循环里便于传参数
ADD OBJECT写在类定义中 便于调用界面元素
如果写成这样
程序代码:
Define Class CC as Form
    Procedure Init
        This.AddObject("xx", "CommandButton")
         This.AddObject("oo", "Label")
    EndProc
EndDefine 
那么在FORM里不能直接引用xx , oo 而如果要实现点击xx 后会改变oo的内容 显然很麻烦 如果添加的控件多一点 再出现一些容器 那么即使使用BINDEVENT( ) 函数也会乱七八糟
所以我的总结是 要便于界面元素的调度 最好使用 ADD OBJECT就能通过ThisForm.xx.oo.kk.bb....来直接找想要的控件了但是很遗憾 ADD OBJECT竟然不能处于循环中,这样在添加控件时代码量会很大啊? 是这样的吗?


[ 本帖最后由 有容就大 于 2012-9-24 14:11 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-09-24 14:10
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 12楼 taohua300
这样貌似不行
图片附件: 游客没有浏览图片的权限,请 登录注册


梅尚程荀
马谭杨奚







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

在Form中改变对象内容:
ThisForm.xx.Caption = "xxxx"
ThisForm.oo.Caption = "yyyy"

这有什么作用? 不就是改变一下按钮的标题吗?

写了个实验
程序代码:
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("oo", "Label")
            .AddObject("xx", "CommandButton")
            With THis.xx
                .Top = 230               
            EndWith
            BindEvent(.xx, "Click", this, "Click1" )
             .SetAll("Visible", .T.)
             .SetAll("Left", 100)
             .SetAll("Width", 100)
             .SetAll("Height", 100)
             .SetAll("BackColor", Rgb(234, 4,45))
         EndWith
         ThisForm.xx.Caption = "xxxx"
         ThisForm.oo.Caption = "yyyy"
    EndProc
   
    Procedure Click1
        MessageBox("八戒。。。")
    EndProc
   
*!*        Procedure xxxx.Click
*!*            MessageBox("悟空。。。")
*!*        EndProc
       
    Procedure destroy
        Clear Events
    EndProc
EndDefine 

如果不把xxxx的悟空 注释掉 会这样
图片附件: 游客没有浏览图片的权限,请 登录注册

如果注释掉能运行
图片附件: 游客没有浏览图片的权限,请 登录注册



[ 本帖最后由 有容就大 于 2012-9-24 15:20 编辑 ]

梅尚程荀
马谭杨奚







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

你都没仔细推敲我上次给你的例子

我现在已经实现了 在FORM里ADD OBJECT 数个容器 然后通过 Init来赋值的架构
你给我的示例看了N遍啊

梅尚程荀
马谭杨奚







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

学习,不介意吧!

一起学习 欢迎加入

梅尚程荀
马谭杨奚







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

首先你要给自己一个理由:为什么要在某处隔层指挥别的对象?

是归属于Container1指挥的,本来就不该在Form1中超越Container1去操纵CommandButton1,Form1在逻辑上只应向Container1发指令,再由Container1按照指令操纵CommandButton1。偶然越级指挥一下,只是临时应变措施,不宜作为常规手段,那是在快速开发时避免写过多封装代码而迁就的,故没有按照完全面向对象的规范把CommandButton1隱藏起来不让外层看见,而让它直接被Form1看见,这已经没严格守规矩了,更不应该寻求跳越多层去遥控更远的对象。用BindEvent()托管,我已经说过那是非常规措施,不宜多用。正路就开辟类设计,构造好管理架构,再简单的封装,哪怕仅仅容器中只有一个控件,也设计一个类。

以事物本身的逻辑来设计,不是以操作方便来设计。

哈哈 老大你说的真好 我试验了这么就发现要封装就彻底点 别拖泥带水 不然在调度界面元素时很麻烦啊。


梅尚程荀
马谭杨奚







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

给别人代码不测试容易出臭.............

再来一次
dd = Newobject("ws")
dd.show
Read events
Return  
 
DEFINE CLASS ws AS form
 
 
    DoCreate = .T.
    Caption = "Form1"
    Name = "Form1"
 
 
    ADD OBJECT container1 AS container WITH ;
        Top = 24, ;
        Left = 84, ;
        Width = 241, ;
        Height = 120, ;
        Name = "Container1"
 
 
    ADD OBJECT command1 AS commandbutton WITH ;
        Top = 192, ;
        Left = 240, ;
        Height = 25, ;
        Width = 60, ;
        Caption = "Command1", ;
        Name = "Command1"
 
 
    PROCEDURE command1.Click
        thisform. = 'ad'
    ENDPROC
   
    PROCEDURE container1.init && 给容器添加对象
        this.AddObject("command1","commandbutton")
        (60,50,60,25)
         = .t.
        bd = 0
        For i = 1 To 5
            tt = 'text' + Transform(i)
            this.AddObject(tt,"textbox")
            this.&tt..move(bd,0,20,25)
            this.&tt..visible = .t.
            bd = bd + 21
        Next
    Endproc  
 
ENDDEFINE
*
*-- EndDefine: ws
**************************************************

灰常 灰常 感谢这位兄弟
学到了两个东西  move(60,50,60,25)     this.&tt..move(bd,0,20,25)

梅尚程荀
马谭杨奚







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

我来蹭分楼主肯定会给的

来者不拒 见者有份 何况是Z版。。。

梅尚程荀
马谭杨奚







                                                       
2012-09-24 15:53
快速回复:发现一个比较尴尬的东西 求解释?
数据加载中...
 
   



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

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