+ -
当前位置:首页 → 问答吧 → 为什么一使用screen.width,编译器就会死掉?

为什么一使用screen.width,编译器就会死掉?

时间:2011-07-16

来源:互联网

Option Explicit

Private Sub Form_Load()
  Me.Left = 10000 '一旦这里改成screen.width,整个编译器都会死
   
End Sub

Private Sub Form_Paint()
  While Me.Left > 0
  DoEvents
  Me.Left = Me.Left - 1
  Wend
End Sub
这段代码也很简单,我奇怪的是,如果Me.Left = 10000如果是给它赋值,就没问题,一旦改成screen.width,编译器都会死掉,只有重启电脑。
大家可以把这段代码复制下来试一下,我一个朋友试,他的机子也死了

作者: ningweidong   发布时间: 2011-07-16

引用楼主 ningweidong 的回复:
Option Explicit

Private Sub Form_Load()
Me.Left = 10000 '一旦这里改成screen.width,整个编译器都会死

End Sub

Private Sub Form_Paint()
While Me.Left > 0
DoEvents
Me.Left = Me.Left - 1
Wend
……
我没编译器死,但出现Screen.Width 是只读属性,它会提示不能给只读属性赋值。拜托这个设置是在属性框内赋值,你这么弄,它是读属性框内的还是读FORM_load里的。这难道还要搞个优先级

作者: Alice814108771   发布时间: 2011-07-22

Me.Left = screen.width '一旦这里改成screen.width,整个编译器都会死
这样的话,整个窗体就会再屏幕的右边,由于不在当前屏幕中显示,所以无法触发Form_Paint事件,所以 应该是不动的才对。不会导致编译器出问题。

作者: BestBadGod   发布时间: 2011-07-22

不是死了,而是没有触发Paint事件,你不能把窗口隐藏,如果隐藏了,就不能触发Paint

你可以这样试一试:
VB code

Option Explicit
Private Sub Form_Load()
    Me.Left = Screen.Width - Me.Width   '一旦这里改成screen.width,整个编译器都会死
End Sub

Private Sub Form_Paint()
    While Me.Left > 0
        DoEvents
        Me.Left = Me.Left - 1
    Wend
End Sub




这个代码正好没有遮挡住窗体,就没有问题。

作者: Veron_04   发布时间: 2011-07-22

引用 2 楼 bestbadgod 的回复:
Me.Left = screen.width '一旦这里改成screen.width,整个编译器都会死
这样的话,整个窗体就会再屏幕的右边,由于不在当前屏幕中显示,所以无法触发Form_Paint事件,所以 应该是不动的才对。不会导致编译器出问题。
试了下,出现了窗口从右向左移动,怎么叫编译器死了?

作者: Alice814108771   发布时间: 2011-07-22

出现了窗口从右向左移动

作者: Alice814108771   发布时间: 2011-07-22

作者: Alice814108771   发布时间: 2011-07-22