- 締切済み
Visual Basicがわかりません。
Public Class Form1 Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint Dim GraphicsFun As System.Drawing.Graphics GraphicsFun = Me.CreateGraphics Dim PenColor As New System.Drawing.Pen _ (System.Drawing.Color.Black) GraphicsFun.DrawRectangle(PenColor, 30, 30, 450, 300) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Enabled = True End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If PictureBox1.Left < 480 - PictureBox1.Width And PictureBox1.Top + 31 Then PictureBox1.Left = PictureBox1.Left + 1 Else If PictureBox1.Top < 330 - PictureBox1.Height Then PictureBox1.Top = PictureBox1.Top + 1 Else If PictureBox1.Left > 30 Then PictureBox1.Left = PictureBox1.Left - 1 Else If PictureBox1.Top > 30 And PictureBox1.Left + 31 Then PictureBox1.Top = PictureBox1.Top - 1 End If End If End If End If End Sub End Class ピクチャーボックスを四角形の中で右周りに枠の中をボタンを押すと回るようにしたいんですけど、2回目の動作と3回目の動作がかぶってしまい、うまくいきません。4回目の解決策を教えてください。また、ボタン2を押すと反対周りにピクチャーボックスが回る、コマンドを 教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
If PictureBox1.Left < 480 - PictureBox1.Width And PictureBox1.Top + 31 Then の Topを調べる方法がまずいですよ これだとピクチャーボックスのTop+31が0以外の場合条件成立です If PictureBox1.Left < 480 - PictureBox1.Width And PictureBox1.Top = 31 Then といった具合にして見ましょう If PictureBox1.Top > 30 And PictureBox1.Left + 31 Then についても PictureBox1.Left = 31 といった具合ですよ
- redfox63
- ベストアンサー率71% (1325/1856)
フォームのクラス変数として dim pt as Point を宣言します FormのLoadイベントで pt = new Point( 31, 31 ) PictureBox1.Location = pt とします Timer_Tickイベントで if pt.Y = 31 or pt.Y + PictureBox1.Height = 329 then ' Y = 31 … 上端 ' Y+height = 329 … 下端 pt.X += Iif( pt.Y = 31, 1, -1 ) if pt.X = 31 or pt.X + PictureBox1.Width = 479 then pt.Y += Iif( pt.Y = 31, 1, -1 ) end if else pt.Y += Iif( pt.X = 31, -1, 1 ) if pt.X = 31 and pt.Y = 31 then timer1.enabled = false if pt.Y = 31 or pt.Y + PictureBox1.Height = 329 then pt.X += Iif(pt.X = 31, 1, -1 ) end if end if PictureBox1.Location = pt といった具合にします 反転させるなら Timer2を貼り付けて Timer2_Tickに if pt.X = 31 or pt.X + PictureBox1.Width = 479 then ' Y = 31 … 上端 ' Y+height = 329 … 下端 pt.Y += Iif( pt.X = 31, -1, 1 ) if pt.Y = 31 or pt.Y + PictureBox1.Height = 329 then pt.X += Iif( pt.X = 31, 1, -1 ) end if else pt.X += Iif( pt.Y = 31, 1, -1 ) if pt.X = 31 and pt.Y = 31 then timer2.enabled = false if pt.X = 31 or pt.X + PictureBox1.Width = 479 then pt.Y += Iif(pt.Y = 31, 1, -1 ) end if end if PictureBox1.Location = pt といった具合にします
補足
親切な回答ありがとうございます。 上のやり方では出来ないのですかね? If PictureBox1.Left < 480 - PictureBox1.Width And PictureBox1.Top + 31 Then PictureBox1.Left = PictureBox1.Left + 1 Else If PictureBox1.Top < 330 - PictureBox1.Height Then PictureBox1.Top = PictureBox1.Top + 1 Else If PictureBox1.Left > 30 Then PictureBox1.Left = PictureBox1.Left - 1 Else If PictureBox1.Top > 30 And PictureBox1.Left + 31 Then PictureBox1.Top = PictureBox1.Top - 1 最後のifの And のところを直したらいけそうな気もするのですけど。出来ないのですか?このやり方だと右下までピクチャーボックスが移動するのですけど。そこから動かなくなるんです。