'请自行建立图片框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