Panel

  • Allgemein

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von TheMagician.

    Hi bin neu hier und ich hab jetzt so eine form. background Color:Grün dort hab
    Ich zwei Panel gesetzt. Das eine ist schwarz das andere gelb.das Schwarze
    Kann ich mit w a s d Steuern. Jetzt möchte ich aber noch, dass wenn das Schwarze
    Und das gelbe Panel sich Berühren oder deckungsgleich sind das die Form darauf
    Reagieren kann.Zb eine msgbox.
    Vorweg:
    Picoflops Lösung ist besser und einfacher.
    Allerdings hab ich jetzt extra ein Projekt erstellt und das hier ausprobiert, daher poste ich's trotzdem. :P

    VB.NET-Quellcode

    1. Public Function CollisionCheck(ByVal Pnl1 As Panel, ByVal Pnl2 As Panel) As Boolean
    2. Return (((Pnl1.Location.X + Pnl1.Width) > Pnl2.Location.X) _
    3. AndAlso (Pnl1.Location.X < (Pnl2.Location.X + Pnl2.Width)) _
    4. AndAlso ((Pnl1.Location.Y + Pnl1.Height) > Pnl2.Location.Y) _
    5. AndAlso (Pnl1.Location.Y < (Pnl2.Location.Y + Pnl2.Height)))
    6. End Function
    Funktioniert bei mir problemlos.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „haiyyu“ ()

    Ausm Reflector:

    VB.NET-Quellcode

    1. Public Function IntersectsWith(ByVal rect As Rectangle) As Boolean
    2. Return ((((rect.X < (Me.X + Me.Width)) AndAlso (Me.X < (rect.X + rect.Width))) AndAlso (rect.Y < (Me.Y + Me.Height))) AndAlso (Me.Y < (rect.Y + rect.Height)))
    3. End Function


    Vor allem sieht man, dass du AND nimmst und nicht ANDALSO ... schäm dich ;)
    Besser as in "Du musst weniger schreiben, weil IntersetsWith() schon im .NET-Framework ist.".

    Und... öhm... was, wenn die Eigenschaft X beim Zugriff einen wichtigen Code ausführt? Dann muss alles ausgewertet werden!!1eins
    Nein, hast schon recht. *Asche über Haupt streu*

    Fehler behoben. :)
    Wozu testest Du denn die Überlappung von Panels?
    Nutze SplitContainer oder TableLayoutPanel und gib Deinen Controls mit Dock = Fill bzw. per Anchor mit, wo sie zu lieben haben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    • Ich versteh das mit den splitcontainers nicht.
    • Könntest du mir das eventuell erklären?
    • Und kann mir jemand Sagen wie man diese Punkte wegbekommt?
    • Das mit den intersectswith hab ich schon versucht.
    • Es klappt nicht weil dann kommen immer ganz viel msgboxen und ich möchte nur eine.
    • Hier der code

      Quellcode

      1. Public Class Form1
      2. Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
      3. Select Case e.KeyChar
      4. Case "w"
      5. Player.Top -= 8
      6. Case "s"
      7. Player.Top += 8
      8. Case "a"
      9. Player.Left -= 8
      10. Case "d"
      11. Player.Left += 8
      12. End Select
      13. End Sub
      14. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      15. MsgBox("Steuerung: W A S D. Ziel: gehen sie mit ihrem player(schwarz) auf das ziel(gelb).", MsgBoxStyle.Information)
      16. Timer1.Start()
      17. End Sub
      18. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
      19. If Player.Bounds.IntersectsWith(Ziel.Bounds) Then
      20. MsgBox("geschafft")
      21. End If
      22. End Sub
      23. Private Sub Ziel_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Ziel.Paint
      24. End Sub
      25. Private Sub Player_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Player.Paint
      26. End Sub
      27. End Class
    • Ich war überrascht wie schnell ihr mir das letzte mal geantwortet habt danke.
    • player ist mein panel1
    • ziel ist mein panel2