Движущийся ящик с картинками с таймером

#vb.net #visual-studio #visual-studio-2010

Вопрос:

Я хочу создать программу, в которой, когда я нажимаю кнопку, поле с картинками той же ширины и высоты, что и форма, перемещается вниз, но я хочу, чтобы таймер останавливался сразу после того, как поле с картинками покинет рамку/форму. И когда я нажму другую кнопку, поле с картинками снова переместится вверх, но остановится, когда окажется в центре формы, в основном в том же месте, где оно было до перемещения вниз. Размер формы-700, 1000, если это поможет. Это мой код:

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  Timer1.Enabled = True End Sub  Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick  PictureBox1.Location = New Point(PictureBox1.Location.X, PictureBox1.Location.Y   9)  If (PictureBox1.Location = New Point(700, 1100)) Then  Timer1.Enabled = False  End If  End Sub  Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click  Timer2.Enabled = True End Sub  Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick  PictureBox1.Location = New Point(PictureBox1.Location.X, PictureBox1.Location.Y - 9)  If (PictureBox1.Location = New Point((Me.Width / 700) - (PictureBox1.Width / 700), (Me.Height / 1000) - (PictureBox1.Height / 1000))) Then  Timer2.Enabled = False  End If End Sub  

Комментарии:

1. В чем ваша проблема? SO предназначен для решения проблем с вашим кодом, а не для написания его за вас.

2. Можете ли вы не делать что-то вроде, если pictureBox1.Top gt; formInstance. Высота, затем Time1.Ennabled = False, затем для сброса pictureBox1.Top = formInstance. Значит, рост….

Ответ №1:

Предположим, что ваше поле с картинками начинается в верхнем левом углу элемента управления, содержащего элемент управления (т. Е. Форму, или панель, или что-то еще). Это Point(0,0) .

В этом обработчике событий…

 Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick  PictureBox1.Location = New Point(PictureBox1.Location.X, PictureBox1.Location.Y   9)  If (PictureBox1.Location = New Point(700, 1100)) Then  Timer1.Enabled = False  End If  End Sub  

…вы проверяете, находится ли верхний левый угол pictureBox1 в положении 700,1100, вместо того, чтобы проверять, находится ли он в 0,1100. Кроме того, поскольку вы добавляете 9 каждый тик таймера, он никогда не будет находиться в положении Y ровно 1100.

А потом в этом случае…

 Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick  PictureBox1.Location = New Point(PictureBox1.Location.X, PictureBox1.Location.Y - 9)  If (PictureBox1.Location = New Point((Me.Width / 700) - (PictureBox1.Width / 700), (Me.Height / 1000) - (PictureBox1.Height / 1000))) Then  Timer2.Enabled = False  End If End Sub  

Вы хотите проверить, является ли pictureBox1.Location теперь 0,0 (начальная позиция) вместо всей той математики положения, которую вы выполняете.

Вот очищенная версия вашего кода. Обратите внимание, что сначала он проверяет положение поля изображения и перемещает его только в случае необходимости.

 Private Const INCREMENT As Integer = 9  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click   Timer1.Enabled = True  End Sub  Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick   If PictureBox1.Location.Y gt;= 1100 Then   Timer1.Enabled = False   Else   PictureBox1.Location = New Point(PictureBox1.Location.X, PictureBox1.Location.Y   INCREMENT)   End If  End Sub  Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click   Timer2.Enabled = True  End Sub  Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick   If PictureBox1.Location.Y lt;= 0 Then   Timer2.Enabled = False   Else   PictureBox1.Location = New Point(PictureBox1.Location.X, PictureBox1.Location.Y - INCREMENT)   End If  End Sub  

Комментарии:

1. Это сработало! Большое вам спасибо!!