0
VB.net 프로그래밍과 관련하여 문제가 있습니다. 특히 keydown 이벤트가 발생하면 개체를 이동하는 데 문제가 있습니다.개체를 주어진 공간에서만 움직이게하려면 어떻게해야합니까?
여기 상황이 있습니다. 나는 그림 상자를 패널 안에 넣고 그 그림 상자를 keydown에 따라 일정한 거리만큼 이동시켰다. 문제는 picturebox가 패널과 겹치는 것처럼 보입니다 (벽을 통과하는 것). 패널의 너비가 객체를 패널을 통과하지 못하도록 제한하는 코드와 관련이 있다고 생각합니다. 불행히도, 나는 그것이 일어나도록하기 위해 어떤 방법이나 그러한 방법을 찾아야 하는지를 알 수없는 것 같습니다.
여기 내 코드는 지금까지 있습니다 :
Private Sub EClassic_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Select Case e.KeyCode
Case Keys.Left
play_avatar.Left -= 100
If play_avatar.Left = -200 Then
Keys.Left. = Nothing
End If
Case Keys.Right
play_avatar.Left += 100
If play_avatar.Left = 200 Then
Keys.Left. = Nothing
End If
End Select
End Sub
귀하의 응답은 대단히 감사합니다! 고맙습니다.
편집 :이 괜찮 았는데 생각
, 감사 @Lolo. 내 코딩이 매우 싸게 보일지라도.
Dim c As Integer = Panel1.ClientSize.Width
Dim res As Integer
Dim res2 As Integer
res2 = c - c + 100
res = c/2
Select Case e.KeyCode
Case Keys.Left
If play_avatar.Left > res2 Then
play_avatar.Left -= 100
ElseIf play_avatar.Left < res2 Then
play_avatar.Left -= 0
End If
Case Keys.Right
If play_avatar.Left < res Then
play_avatar.Left += 100
ElseIf play_avatar.Left > res Then
play_avatar.Left -= 0
End If
End Select
나를 위해 작동하지 않는 것 같다. 이것이 가능한지 알고 싶습니까? '선택 케이스 e.KeyCode 케이스 Keys.Left play_avatar.Left - = 100 하면 play_avatar.Left = -200이 조건이 충족되는 경우 다음 가 '키를 비활성화 할 수있는 방법이 있나요? 끝 케이스 Keys.Right play_avatar.Left + = 100 주는 경우 play_avatar.Left = 200 다음 '이 조건이 충족되는 경우 키를 비활성화 할 수있는 방법이 있나요? 끝 부분 끝 선택 ' – Chris
'조건이 충족 될 때까지 (play_avatar.Left)에 값을 지정하지 마십시오. 변수를 사용하여 100을 더하거나 뺀 후에 새 값을 먼저 테스트 한 다음이 값을 (play_avatar.Left)에 할당합니다. 키보드 처리 이벤트를 비활성화 할 수 없습니다. 조건이 충족되지 않는 경우에만 이벤트를 취소 할 수 있습니다. (Keys.Left. = Nothing) 대신 (e.Cancel = True)를 사용하십시오. – Ala
@Lolo : 'Keys.Left'다음에 점을 찍었습니다. 간단히 'Keys.Left'여야합니다. 나는 여전히 여기에 약간의 결함이있는 것으로 의심한다. 왼쪽의 움직임을 패널의 오른편 가장자리와 비교하면, 그 반대의 경우도 마찬가지다. – Paul