Hallo Forum,
ich habe ein Programm geschrieben, bei dem ein Kreis bewegt werden kann, und an den Rändern der Form "stoppt".
Ich habe ein Rectangle angegeben, in dem sich der Kreis bewegen darf und dieses Rectangle die Größe der Form zugewiesen.
Die Formgröße ist 800;600, aber wenn ich jetzt starte und dem Kreis sage, dass dieser stoppen soll, hält er nur außerhalb der Form.
Ich habe mir die Position in einer Konsole ausgeben lassen, vielleicht hat jemand eine Idee. Hier der Code:
Spoiler anzeigen
Klasse Kreis:
Klasse Form:
Grüße,
TheVBTutorialsVB
ich habe ein Programm geschrieben, bei dem ein Kreis bewegt werden kann, und an den Rändern der Form "stoppt".
Ich habe ein Rectangle angegeben, in dem sich der Kreis bewegen darf und dieses Rectangle die Größe der Form zugewiesen.
Die Formgröße ist 800;600, aber wenn ich jetzt starte und dem Kreis sage, dass dieser stoppen soll, hält er nur außerhalb der Form.
Ich habe mir die Position in einer Konsole ausgeben lassen, vielleicht hat jemand eine Idee. Hier der Code:
Klasse Kreis:
VB.NET-Quellcode
- Public Class Kreis
- Private r As Integer
- Private p As Point
- Public Sub New(ByVal radius As Integer, ByVal position As Point)
- r = radius
- p = position
- End Sub
- Public Property Position As Point
- Get
- Return p
- End Get
- Set(value As Point)
- p = value
- End Set
- End Property
- Public Property Radius As Integer
- Get
- Return r
- End Get
- Set(value As Integer)
- r = value
- End Set
- End Property
- Public Sub Draw(ByVal e As System.Windows.Forms.PaintEventArgs)
- e.Graphics.DrawEllipse(Pens.Black, New Rectangle(p, New Size(r * 2, r * 2)))
- End Sub
- End Class
Klasse Form:
VB.NET-Quellcode
- Imports System.Runtime.InteropServices
- Public Class Form1
- <DllImport("kernel32", SetLastError:=True)> _
- Private Shared Function AllocConsole() As Boolean
- End Function
- <DllImport("kernel32", SetLastError:=True)> _
- Private Shared Function FreeConsole() As Boolean
- End Function
- Private k As New Kreis(50, New Point(50, 50))
- Private r As Rectangle
- Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- AllocConsole()
- Console.WriteLine("-Programm gestartet-" & vbNewLine)
- Console.WriteLine("X: " + CStr(k.Position.X.ToString) + " Y: " + CStr(k.Position.Y))
- Console.WriteLine("Startet mit Radius: " + CStr(k.Radius))
- Me.Width = 1000
- Me.Height = 800
- r = New Rectangle(New Point(0, 0), New Size(Me.Width - 120, Me.Height - 140))
- End Sub
- Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
- Select Case e.KeyCode
- Case Keys.W
- If k.Position.Y > r.Y Then
- k.Position = New Point(k.Position.X, k.Position.Y - 5)
- Me.Invalidate()
- Console.WriteLine("X: " + CStr(k.Position.X.ToString) + " Y: " + CStr(k.Position.Y))
- End If
- Case Keys.S
- If k.Position.Y < r.Height Then
- k.Position = New Point(k.Position.X, k.Position.Y + 5)
- Me.Invalidate()
- Console.WriteLine("X: " + CStr(k.Position.X.ToString) + " Y: " + CStr(k.Position.Y))
- End If
- Case Keys.D
- If k.Position.X < r.Width Then
- k.Position = New Point(k.Position.X + 5, k.Position.Y)
- Me.Invalidate()
- Console.WriteLine("X: " + CStr(k.Position.X.ToString) + " Y: " + CStr(k.Position.Y))
- End If
- Case Keys.A
- If k.Position.X > r.X Then
- k.Position = New Point(k.Position.X - 5, k.Position.Y)
- Me.Invalidate()
- Console.WriteLine("X: " + CStr(k.Position.X.ToString) + " Y: " + CStr(k.Position.Y))
- End If
- Case Keys.Add
- k.Radius += 1
- Me.Invalidate()
- Console.WriteLine("Radius: " + CStr(k.Radius))
- Case Keys.Subtract
- k.Radius -= 1
- Me.Invalidate()
- Console.WriteLine("Radius: " + CStr(k.Radius))
- End Select
- End Sub
- Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
- k.Draw(e)
- End Sub
- End Class
Grüße,
TheVBTutorialsVB