#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. Это сработало! Большое вам спасибо!!