| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1680 人关注过本帖
标题:发现一个比较尴尬的东西 求解释?
只看楼主 加入收藏
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:0 
Add Object dd  as commandbutton With 
or
Add Object dd form1. as commandbutton With 

试试
form1 为表单的name属性值
dd 为控件名

使用for循环添加的时候
dd不能为重复的



个性太多,无法显示
2012-09-24 14:45
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:0 
程序代码:
**************************************************
*-- Form:         form1 (e:\tc\lcz\0921\js_dn\qqqqq.scx)
*-- ParentClass:  form
*-- BaseClass:    form
*-- 时间戳:   09/24/12 02:34:08 PM
*
DEFINE CLASS form1 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 form1. AS commandbutton WITH ;
        Top = 60, ;
        Left = 108, ;
        Height = 25, ;
        Width = 60, ;
        Caption = "Command1", ;
        Name = "Command1"


    ADD OBJECT command1 AS commandbutton WITH ;
        Top = 192, ;
        Left = 240, ;
        Height = 25, ;
        Width = 60, ;
        Caption = "Command1", ;
        Name = "Command1"


    PROCEDURE command1.Click
        thisform. = 'ad'
    ENDPROC


ENDDEFINE
*
*-- EndDefine: form1
**************************************************

个性太多,无法显示
2012-09-24 14:46
有容就大
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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你都没仔细推敲我上次给你的例子

授人以渔,不授人以鱼。
2012-09-24 15:20
小习小习
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:6
帖 子:1467
专家分:4792
注 册:2012-7-2
收藏
得分:3 
学习,不介意吧!

实现自己既定的目标,必须能耐得住寂寞单干。
2012-09-24 15:20
有容就大
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
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:3 
给别人代码不测试容易出臭.............

再来一次
程序代码:
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
**************************************************


个性太多,无法显示
2012-09-24 15:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
首先你要给自己一个理由:为什么要在某处隔层指挥别的对象?

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

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

授人以渔,不授人以鱼。
2012-09-24 15:38
快速回复:发现一个比较尴尬的东西 求解释?
数据加载中...
 
   



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

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