vb菜鸟级问题,谢谢

PrivateSubCommand1_Click()Timer1.Enabled=TrueEndSubPrivateSubCommand2_Click()Timer1.E... Private Sub Command1_Click()
Timer1.Enabled = True
End Sub

Private Sub Command2_Click()
Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
Label1.Left = Label1.Left + 100
End Sub

这个代码 的意思是 点击按钮1使,标签1的左边距+100 点击按钮2停止

但是 在我运行的时候,标签1从 最左面 无限向最右面移动
我想实现,当标签1移动到 窗口的最右端时,使其向窗口最左端移动。移动到最左端 再向最右端移动。

我把下面这段代码 写在timer过程里,可是当满足条件时,标签却不动了。。怎么解决? 谢谢
If Label1.Left > 300 Then
Label1.Left = Label1.Left - 100
Else
Label1.Left = Label1.Left + 100
End If
If Label1.Left < 10 Then
Label1.Left = Label1.Left + 100
Else
Label1.Left = Label1.Left - 100
End If

我这样写 可能方法笨,有好方法 也说下 谢谢了

方瀚 帮我想想把,我试了 好几种写法,不是不动 就是在100的范围里 动, 先谢谢你
不用考虑 窗口大小变化 等复杂问题 F5中...

那2个 按钮的点击 可以去掉

2楼你那个 就属于 在100范围里移动的那种,不行啊
展开
 我来答
明智还热切丶国宝4183
2010-02-06 · TA获得超过193个赞
知道答主
回答量:347
采纳率:0%
帮助的人:226万
展开全部
不笨,我以前也经常干这种事
按照你补充的代码就会造成:
label1移动到最左边时往右移100
此时label1的left值为4100
那么下一次Label1.Left = Label1.Left + 100时left值又会达到4200
然后触发条件使label向右移,死循环

(⊙o⊙)…额,你咋又改了
我的代码,
再等等,马上想好了,现在担心老妈突然回来

方案一:定义全局变量
Private D As Integer
Private Sub Form_Load()
D = 1
End Sub

Private Sub Timer1_Timer()
If D = 1 Then
Label1.Left = Label1.Left + 100
ElseIf D = 0 Then
Label1.Left = Label1.Left - 100
End If
If Label1.Left > 3600 Then
D = 0
ElseIf Label1.Left < 0 Then
D = 1
End If
End Sub

方案二:利用FOR...NEXT循环语句

Public Sub Delay(ByVal ParTime As Long)
Dim tim
tim = Timer
While Timer - tim < ParTime
DoEvents
Wend
End Sub

Private Sub Timer1_Timer()
Dim a
For a = Label1.Left To 3600 Step 100
Label1.Left = a
Delay 1
Next
For a = Label1.Left To 0 Step -1
Label1.Left = a
Delay 1
Next
End Sub

方案三:两个timer控件配合

Private Sub Form_Load()
Timer2.Enabled = False
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Label1.Left = Label1.Left + 100
If Label1.Left > 3600 Then
Timer2.Enabled = True
Timer1.Enabled = False
End If
End Sub

Private Sub Timer2_Timer()
Label1.Left = Label1.Left - 100
If Label1.Left < 0 Then
Timer1.Enabled = True
Timer2.Enabled = False
End If
End Sub

方案四:用textbox控件做全局变量
Private Sub Form_Load()
Text1.Text = "0"
End Sub

Private Sub Text1_Change()

End Sub

Private Sub Timer1_Timer()
If Text1.Text = 1 Then
Label1.Left = Label1.Left + 100
ElseIf Text1.Text = 0 Then
Label1.Left = Label1.Left - 100
End If
If Label1.Left > 3600 Then
Text1.Text = 0
ElseIf Label1.Left < 0 Then
Text1.Text = 1
End If
End Sub
百度网友ecafeb0
2010-02-05 · TA获得超过705个赞
知道小有建树答主
回答量:1049
采纳率:0%
帮助的人:347万
展开全部
Private Sub Timer1_Timer()
If Label1.Left > 300 Then
Label1.Left = Label1.Left - 100
ElseIf Label1.Left < 10 Then
Label1.Left = Label1.Left + 100
End If
End Sub
你把补充的那些话改成这样如何,试试哦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d1ed4a9430
2010-02-05 · TA获得超过1.6万个赞
知道大有可为答主
回答量:6236
采纳率:73%
帮助的人:3537万
展开全部
这样写试试:
Private D as Integer
Private Sub Form_load()
D=1
End Sub

Private Sub Timer1_Timer()
If Label1.Left >= 4200 or Label1.Left <= 0 Then
D= -1 * D
End If
Label1.Left = Label1.Left + 100
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Yuqi_Tan

2010-02-05 · TA获得超过8.9万个赞
知道大有可为答主
回答量:9918
采纳率:93%
帮助的人:3479万
展开全部
哈,楼主碰到的问题相信每一个学习编程的人都碰到过。你发上来的那前后共四段程序中,前两段是一点问题都没有,问题在第三段上,后来发的第四段对第三段的补充,虽然麻烦了一些,可以看出楼主是动了脑筋了,呵呵。但还是有一些问题。我给你重新写了一下,现在全发给你吧!已经运行过了。有问题或不明白的地方请提出来!

Dim M As Boolean

Private Sub Command1_Click()
Timer1.Enabled = True
End Sub

Private Sub Command2_Click()
Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
If M Then
Label1.Left = Label1.Left + 100
If Label1.Left > Form1.ScaleWidth - Label1.Width Then M = Not M
Else
Label1.Left = Label1.Left - 100
If Label1.Left < 100 Then M = Not M
End If
End Sub

Private Sub Form_Load()
M = True
Timer1.Interval = 100
Timer1.Enabled = False
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c865a6263
2010-02-06 · 超过33用户采纳过TA的回答
知道答主
回答量:148
采纳率:0%
帮助的人:0
展开全部
If Label1.Left > 300 Then
Label1.Left = 0
Else
Label1.Left = Label1.Left + 100
End If
就这一句就可以了,当标签移动最右边时,那LABEL.LEFT的值就肯定大于300了,那就把LEFT的值变为0,就是又弹回窗体的最左边,然后再重新移动到右边,你把我的代码复制过去试试就明白了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式