VB 选中PictureBox

RT,就是点击PictureBox然后按键盘上的方向键可以控制它的移动,点击PictureBox2的时候按方向键又可以使1不动,动2?如果移动中遇到Picture3就会无法继续朝该方向移动?麻烦分开来回答一下了啊。
我自己写了一段,可以用的话改一下,不好的话直接把您的贴上来吧。我不是伸手党的。
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = 37 Then
Picture1.Left = Picture1.Left - 100
If Picture1.Left < 0 Then Picture1.Left = Me.Width - Picture1.Width
End If

If KeyCode = 38 Then
Picture1.Top = Picture1.Top - 100
If Picture1.Top < 0 Then Picture1.Top = Me.Height - Picture1.Height
End If

If KeyCode = 39 Then
Picture1.Left = Picture1.Left + 100
If Picture1.Left > Me.Width Then Picture1.Left = 0
End If

If KeyCode = 40 Then
Picture1.Top = Picture1.Top + 100
If Picture1.Top > Me.Height Then Picture1.Top = 0
End If

End Sub

'请自行建立图片框3个
'picture1(0)
'picture1(1)
'picture1(2)
'Form 的 KeyPreview 属性设置为TRUE
'写上以下代码即可实现

Option Explicit

Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function RectInRegion Lib "gdi32" (ByVal hRgn As Long, lpRect As RECT) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Dim s As Integer, j As Integer

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case s
Case 0
If Not 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height) Then
If Not 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
Select Case KeyCode
Case 37
Picture1(s).Left = Picture1(s).Left - j
Case 38
Picture1(s).Top = Picture1(s).Top - j
Case 39
Picture1(s).Left = Picture1(s).Left + j
Case 40
Picture1(s).Top = Picture1(s).Top + j
End Select
End If
End If
Case 1
If Not 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height) Then
If Not 检查重叠(Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
Select Case KeyCode
Case 37
Picture1(s).Left = Picture1(s).Left - j
Case 38
Picture1(s).Top = Picture1(s).Top - j
Case 39
Picture1(s).Left = Picture1(s).Left + j
Case 40
Picture1(s).Top = Picture1(s).Top + j
End Select
End If
End If
Case 2
If Not 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
If Not 检查重叠(Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
Select Case KeyCode
Case 37
Picture1(s).Left = Picture1(s).Left - j
Case 38
Picture1(s).Top = Picture1(s).Top - j
Case 39
Picture1(s).Left = Picture1(s).Left + j
Case 40
Picture1(s).Top = Picture1(s).Top + j
End Select
End If
End If
End Select
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 37
If 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height) Then
Picture1(s).Left = Picture1(s).Left + j
End If
If 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
Picture1(s).Left = Picture1(s).Left + j
End If
If 检查重叠(Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
Picture1(s).Left = Picture1(s).Left + j
End If
Case 38
If 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height) Then
Picture1(s).Top = Picture1(s).Top + j
End If
If 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
Picture1(s).Top = Picture1(s).Top + j
End If
If 检查重叠(Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
Picture1(s).Top = Picture1(s).Top + j
End If
Case 39
If 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height) Then
Picture1(s).Left = Picture1(s).Left - j
End If
If 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
Picture1(s).Left = Picture1(s).Left - j
End If
If 检查重叠(Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
Picture1(s).Left = Picture1(s).Left - j
End If
Case 40
If 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height) Then
Picture1(s).Top = Picture1(s).Top - j
End If
If 检查重叠(Picture1(0).Left, Picture1(0).Top, Picture1(0).Left + Picture1(0).Width, Picture1(0).Top + Picture1(0).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
Picture1(s).Top = Picture1(s).Top - j
End If
If 检查重叠(Picture1(1).Left, Picture1(1).Top, Picture1(1).Left + Picture1(1).Width, Picture1(1).Top + Picture1(1).Height, Picture1(2).Left, Picture1(2).Top, Picture1(2).Left + Picture1(2).Width, Picture1(2).Top + Picture1(2).Height) Then
Picture1(s).Top = Picture1(s).Top - j
End If
End Select
End Sub

Private Sub Form_Load()
Dim i As Integer
For i = 0 To 2
Picture1(i).AutoRedraw = True
Next
j = 100 '移动单步距离
Call Picture1_Click(0)
End Sub

Private Sub Picture1_Click(Index As Integer)
Dim i As Integer
s = Index
For i = 0 To 2
Picture1(i).Cls
If s = i Then
Picture1(i).ForeColor = vbRed
Picture1(i).Print i + 1, "选中"
Else
Picture1(i).ForeColor = vbBlack
Picture1(i).Print i + 1, "没选中"
End If
Next
End Sub

Function 检查重叠(l1 As Long, t1 As Long, r1 As Long, b1 As Long, l2 As Long, t2 As Long, r2 As Long, b2 As Long) As Boolean
Dim pHwnd As Long
Dim rr1 As RECT, rr2 As RECT

With rr1
.Top = t1
.Left = l1
.Right = r1
.Bottom = b1
pHwnd = CreateRectRgn(.Left, .Top, .Right, .Bottom)
End With

With rr2
.Top = t2
.Left = l2
.Right = r2
.Bottom = b2
End With

检查重叠 = RectInRegion(pHwnd, rr2)
DeleteObject pHwnd
End Function

参考资料:VB专业解答团 http://zhidao.baidu.com/team/view/VB%D7%A8%D2%B5%BD%E2%B4%F0%CD%C5

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-01
form是无法触发
Form_KeyDown事件的!
换成Picture1就好了!

为了执行picture2的功能,楼主应逆向思维将picture1和picture2的外观及位置掉包,注意使用autosize,并且新建一个文本变量picstr储存图片路径,picstr=picture2.Picture:picture2.Picture=picture1.Picture:picture1.Picture=picstr,同理两个整数变量记录坐标,然后交换。给人的感觉是picture2在动,代码非常简单我就不写了。

以下是可以上下左右移动并不会穿过picture3的picture1的代码,1楼的那套判定罗嗦之极,其实可以很精简的!

Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)
If Picture1.Left > Picture3.Left + Picture3.Width Or Picture3.Left > Picture1.Left + Picture1.Width Or Picture1.Top > Picture3.Top + Picture3.Height Or Picture3.Top > Picture1.Top + Picture1.Height Then
If KeyCode = 37 Then
Picture1.Left = Picture1.Left - 100
If Picture1.Left < 0 Then Picture1.Left = Me.Width - Picture1.Width
End If
If KeyCode = 38 Then
Picture1.Top = Picture1.Top - 100
If Picture1.Top < 0 Then Picture1.Top = Me.Height - Picture1.Height
End If
If KeyCode = 39 Then
Picture1.Left = Picture1.Left + 100
If Picture1.Left > Me.Width Then Picture1.Left = 0
End If
If KeyCode = 40 Then
Picture1.Top = Picture1.Top + 100
If Picture1.Top > Me.Height Then Picture1.Top = 0
End If
Else
If Picture1.Left > Picture3.Left + Picture3.Width - 100 Then Picture1.Left = Picture1.Left + 100
If Picture3.Left > Picture1.Left + Picture1.Width - 100 Then Picture1.Left = Picture1.Left - 100
If Picture1.Top > Picture3.Top + Picture3.Height - 100 Then Picture1.Top = Picture1.Top + 100
If Picture3.Top > Picture1.Top + Picture1.Height - 100 Then Picture1.Top = Picture1.Top - 100
End If
End Sub本回答被提问者采纳
相似回答