注册 登录
编程论坛 VFP论坛

奇怪ADD OBJECT与AddObject()效果完全不同

mywisdom88 发布于 2022-10-03 14:57, 1142 次点击
下面分别用这2种方法,增加一个自定义的类,目的是容器cnt的大小根据label的大小变化,结果 用add object 的可以,但addobject()的没变化
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录


of = CREATEOBJECT("form1")
of.Height =600
of.Width = 800
of.show(1)
CLEAR ALL
RETURN

DEFINE CLASS form1 as Form

ADD OBJECT "Cmd1" as commandbutton
Cmd1.top =10
Cmd1.left = 10
PROCEDURE Cmd1.Click
WITH thisform
.AddObject("Cnt2","Cnt")
.Cnt2.top =100
.Cnt2.left= 400
.Cnt2.visible = .t.
.Cnt2.label1.caption = "哈哈哈哈哈哈哈哈"

ENDWITH
ENDPROC

ADD OBJECT "Cnt1" as Cnt
Cnt1.top =100
Cnt1.left= 10
Cnt1.label1.caption = "哈哈哈哈哈哈哈哈"

ENDDEFINE

DEFINE CLASS "Cnt" as Container
  Height = 50
  Width = 100
  ADD OBJECT Label1 as Label WITH BackStyle = 0,AutoSize = .t.,top = 5,left = 5

PROCEDURE Init
 this.Width = this.Label1.Width + 10
ENDPROC
  
ENDDEFINE
4 回复
#2
mywisdom882022-10-03 15:00
点Cmd1,生成 Cnt2的效果和直接用 add object的效果完全不同
#3
mywisdom882022-10-03 15:18
在红字这,改了下,就可以,但会停顿。。。。
of = CREATEOBJECT("form1")

of.Height =600
of.Width = 800
of.show(1)

CLEAR ALL
RETURN


DEFINE CLASS form1 as Form

ADD OBJECT "Cmd1" as commandbutton
Cmd1.top =10
Cmd1.left = 10

PROCEDURE Cmd1.Click

WITH thisform
.AddObject("Cnt2","Cnt")
.Cnt2.top =100
.Cnt2.left= 400
.Cnt2.visible = .t.
.Cnt2.label1.caption = "哈哈哈哈哈哈哈哈"
.Cnt2.Click()

ENDWITH
ENDPROC

ADD OBJECT "Cnt1" as Cnt
Cnt1.top =100
Cnt1.left= 10
Cnt1.label1.caption = "哈哈哈哈哈哈哈哈"

ENDDEFINE

DEFINE CLASS "Cnt" as Container
  Height = 50
  Width = 100
  ADD OBJECT Label1 as Label WITH BackStyle = 0,AutoSize = .t.,top = 5,left = 5

PROCEDURE Init

 this.Width = this.Label1.Width + 10
ENDPROC

  
PROCEDURE Click
*MESSAGEBOX("点了")  && 奇怪的是,这2个地方,随便一个,都可以
WAIT "" TIMEOUT 0.001 && 奇怪的是,这2个地方,随便一个,都可以
   this.Width = this.Label1.Width + 10
ENDPROC


ENDDEFINE
#4
mywisdom882022-10-03 18:37
吹版,知道什么原因吗
#5
mywisdom882022-10-04 17:38
发现,用 add object 生成的,在 INIT中,就改变了

DEFINE CLASS "Cnt" as Container
  Height = 50
  Width = 100
  ADD OBJECT Label1 as Label WITH BackStyle = 0,AutoSize = .t.,top = 5,left = 5

PROCEDURE Init
 MESSAGEBOX(this.Label1.Width) && 用ADD OBJECT的,就是真是长度了,但 ADDOBJECT()是38,默认长度
 this.Width = this.Label1.Width + 10
ENDPROC
  
ENDDEFINE

1