Как заставить ПикчерБокс перемещаться?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

^^ExsTaZzi^^
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 29.06.2008 (Вс) 18:36

Как заставить ПикчерБокс перемещаться?

Сообщение ^^ExsTaZzi^^ » 08.07.2008 (Вт) 12:35

Собственно возник этот вопрос...
Есть форма и на ней пикчербокс.
Как при нажатии например на клавишу left (ну или другую)
заставить пикчербокс переместиться на определённое кол-во пикселей(есть 4 направления движения влево , вправо , вверх и вниз) ?
Желательно привести пример кода хотябы в одну сторону (влево например) :)
А дальше сам разберусь.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 08.07.2008 (Вт) 12:59

Обрабатываешь KeyDown на форме (свойство KeyPreview установи = True) заметь, что при получении фокуса контролом, получающим фокус, начинает работать его KeyDown. Разбирайся в общем...
Код: Выделить всё
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
 
  Select Case KeyCode
   
    'Влево
    Case 37: Picture1.Move _
              Picture1.Left - 1, _
              Picture1.Top, _
              Picture1.Width, _
              Picture1.Height
   
    'Вверх
    Case 38: Picture1.Move _
              Picture1.Left, _
              Picture1.Top - 1, _
              Picture1.Width, _
              Picture1.Height
   
    'Вправо
    Case 39: Picture1.Move _
              Picture1.Left + 1, _
              Picture1.Top, _
              Picture1.Width, _
              Picture1.Height
   
    'Вниз
    Case 40: Picture1.Move _
              Picture1.Left, _
              Picture1.Top + 1, _
              Picture1.Width, _
              Picture1.Height
             
  End Select
 
End Sub


и ScaleMode у формы сделай 3 - Pixel
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 08.07.2008 (Вт) 13:30

^^ExsTaZzi^^, главное не забыть перевести приведенный Денис код с VB6 в VB.NET.
Весь мир матрица, а мы в нем потоки байтов!

^^ExsTaZzi^^
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 29.06.2008 (Вс) 18:36

Сообщение ^^ExsTaZzi^^ » 08.07.2008 (Вт) 13:41

vb.net не понимает команду Picture1.Move (PictureBox1.Move)
и выдает ошибку
'Public Event Move(sender As Object, e As System.EventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.

Как исправить?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 08.07.2008 (Вт) 13:49

^^ExsTaZzi^^, я же предупреждал. Это код для VB6. Принцип тот же, команды несколько другие.
Весь мир матрица, а мы в нем потоки байтов!

^^ExsTaZzi^^
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 29.06.2008 (Вс) 18:36

Сообщение ^^ExsTaZzi^^ » 08.07.2008 (Вт) 14:08

Viper
А как исправить (всмысле что написать вместо PictureBox1.Move что бы vb.net понимал)?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 08.07.2008 (Вт) 14:13

Эх, блин! Опять "постишь - не смотришь, а форум-то .NET"
Извиняюсь. Примерно так, но здесь стрелки не работают :(
Код: Выделить всё
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

        Debug.Print("K = " & CStr(e.KeyCode) & "; S = " & CStr(e.Shift))

        Select Case e.KeyCode

            'Влево
            Case 37 : P1.Left = P1.Left - 1
                'Вверх
            Case 38 : P1.Top = P1.Top - 1
                'Вправо
            Case 39 : P1.Left = P1.Left + 1
                'Вниз
            Case 40 : P1.Top = P1.Top + 1

        End Select

    End Sub


Возникает встречный вопрос: Почему не перехватываются именно стрелки? Чего еще надо включить?
________________
Короче, надо юзать KeyUp

Код: Выделить всё
Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp

        Debug.Print("K = " & CStr(e.KeyData))

        Select Case e.KeyCode

            'Влево
            Case 37 : P1.Left = P1.Left - 1
                'Вверх
            Case 38 : P1.Top = P1.Top - 1
                'Вправо
            Case 39 : P1.Left = P1.Left + 1
                'Вниз
            Case 40 : P1.Top = P1.Top + 1

        End Select

    End Sub
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Сообщение Williams » 09.07.2008 (Ср) 1:11

Денис

Можно кстати сократить:



Код: Выделить всё
P1.Left +=1


вместо


Код: Выделить всё
P1.Left = P1.Left + 1






--------------------

В такого рода событиях еще есть e.Handled, помечающий событие как обработанное.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList