vb 中撞墙问题

[复制链接]
查看11 | 回复2 | 2011-3-5 03:16:02 | 显示全部楼层 |阅读模式
vb中撞墙 问题,直接发代码
Private Sub Form_Activate()

frmtank.BorderStyle = 0

frmtank.Height = 8000

frmtank.Width = 8000

lblTank.Height = 800

lblTank.Width = 800

lblTank.BackColor = vbYellow

lblTank.Top = frmtank.Height / 2 - lblTank.Height / 2

lblTank.Left = frmtank.Width / 2 - lblTank.Width / 2

lblTank.Caption = \"\"
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

Select Case KeyCode

Case vbKeyRight

If lblTank.Leftfrmtank.Width - lblTank.Width Then

lblTank.Left = lblTank.Left 200

End If

Case vbKeyDown

If lblTank.Topfrmtank.Height - lblTank.Height Then

lblTank.Top = lblTank.Top 200

End If

Case vbKeyLeft

If lblTank.Left0 Then

lblTank.Left = lblTank.Left - 200

End If

Case vbKeyUp

If lblTank.Top0 Then

lblTank.Top = lblTank.Top - 200

End If

End Select
End Sub

第一个问题:为什么在ACTIVATE中设置 borderstyle为0不行,要在属性窗口中呢?
第二个问题:为什么borderstyle为0了,lbltank就可以正确移动了,而不为0会出现如图效果
提前非常感谢各位大虾的帮忙
回复

使用道具 举报

千问 | 2011-3-5 03:16:02 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">问得好,这正是我想回答的问题。第二个问题以前也困扰着我,那时候我也不知道是为什么会这样,现在知道了。

回答第一个问题:
这是VB 6.0 的缺陷,是制作 VB 6.0 时 某些地方弄得不好而造成的,VB 制作组说那个属性不能动态修改。
不过我们还是有办法实现那个效果的,你只需在修改那个属性后,再修改下窗口的标题,就可以了。

回答第二个问题:
(现在屏幕颤动得要命,电脑可能要死机了,可能我写不完答案)
你认为 borderstyle为0了,lbltank 不移出窗口外,其实不是这样的,你感觉是这样,只是因为那时候窗口的 ScaleWidth 和 Width 接近,ScaleHeight 和 Height接近,所以你看不出明显的错误。

你应该把你代码里面的 Width 改成 ScaleWidth,把 Height 改成 ScaleHeight。
我知道你要实现什么,下面是我给你修改好的代码:
(正在写...请等会儿,我先提交修改,防止死机)
(写好了)
Private Sub Form_Load()

\'修改窗口样式

frmtank.BorderStyle = 0

\'frmtank.Caption = frmtank.Caption

\'设置窗口和标签的属性

frmtank.Height = 8000

frmtank.Width = 8000

lblTank.Height = 800

lblTank.Width = 800

lblTank.BackColor = vbYellow

lblTank.Top = frmtank.Height / 2 - lblTank.Height / 2

lblTank.Left = frmtank.Width / 2 - lblTank.Width / 2

lblTank.Caption = \"\"
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

Select Case KeyCode

Case vbKeyRight

If lblTank.Left(frmtank.ScaleWidth - lblTank.Width) Then

lblTank.Left = lblTank.Left 200

End If

Case vbKeyDown

If lblTank.Top(frmtank.ScaleHeight - lblTank.Height) Then

lblTank.Top = lblTank.Top 200

End If

Case vbKeyLeft

If lblTank.Left0 Then

lblTank.Left = lblTank.Left - 200

End If

Case vbKeyUp

If lblTank.Top0 Then

lblTank.Top = lblTank.Top - 200

End If

End Select
End Sub
回复

使用道具 举报

千问 | 2011-3-5 03:16:02 | 显示全部楼层
<pre id=\"content-577278874\" class=\"reply-text mb10\">只为结果 不为现象你也可以google知
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行