Panel nicht über die Form hinaus

  • VB.NET
  • .NET (FX) 4.0

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von toto.

    Panel nicht über die Form hinaus

    Guten Abend,

    ich versuche ein Panel von Rechts nach Links laufen zu lassen.

    hier mein Code:

    Dim nStartPos As Point
    Dim nEndPos As Point
    Private Sub tmrTempo_Tick(sender As Object, e As EventArgs) Handles tmrTempo.Tick
    nStartPos.X = (7)
    nStartPos.Y = (482)
    nEndPos.X = (500)
    Panel1.Location = New Point(Panel1.Location.X + 25, Panel1.Location.Y)
    If Panel1.Location = nEndPos Then
    tmrTempo.Stop()
    Panel1.Location = nStartPos
    End If
    tmrTempo.Start()

    End Sub

    Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
    tmrTempo.Stop()
    Panel1.Location = nStartPos
    End Sub

    Der Panel soll eigentlich immer hin und her laufen bis gestopt wird.
    Leider verschwindet über die Form hinaus.

    Wäre für ein wenig hilfe dankber
    lg toto
    Hallo Corby,
    die start Position hat nunmal 2 Coordinate, das ist die Position wo der Panel sich am Anfang befindet.
    So wenn der Timer tickt, der Panel geht auch in die X-Achse um +25, soll aber bei X=500 stoppen und von Vorne anfangen.
    lg toto

    toto schrieb:

    sonst noch Ideen?
    Moin Toto,
    vergleiche x0 und x1 sowie (x0 + w0) und (x1 + w1) mit (0) - Form, (1) - Panel (analog y und Höhe):

    VB.NET-Quellcode

    1. If (x0 <= x1) AndAlso (x0 + w0 >= x1 + w1) Then
    2. ' alles drinnen
    3. End If
    Ggf. musst Du <= durch < und >= durch > ersetzen.
    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!
    Sorry

    VB.NET-Quellcode

    1. Private Sub tmrTempo_Tick(sender As Object, e As EventArgs) Handles tmrTempo.Tick
    2. nStartPos.X = (7)
    3. nStartPos.Y = (482)
    4. nEndPos.X = (500)
    5. Panel1.Location = New Point(Panel1.Location.X + 25, Panel1.Location.Y)
    6. If Panel1.Location = nEndPos Then
    7. 'tmrTempo.Stop()
    8. Panel1.Location = nStartPos
    9. End If
    10. ' tmrTempo.Start()
    11. End Sub


    Start und Stop sind weg.
    und
    [vbnet] Panel1.Location = nStartPos [vbnet]

    ist gegeben

    @ Servus Rod...
    eine harte Nuss hast mir gegeben....
    gib mir ein wenig Zeit, deine FORMEL muss ich erst verstehen

    lg toto

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

    If Panel1.Location = nEndPos Then ... da muss doch ein Fehler angeleiert werden
    Das Ganze einmal ganz vereinfacht...

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private WithEvents tmrTempo As New Timer
    4. Private nStartPos As Point = New Point(7, 25)
    5. Private nEndPos As Point = New Point(500, 25)
    6. Private Sub tmrTempo_Tick(sender As Object, e As EventArgs) Handles tmrTempo.Tick
    7. Panel1.Location = New Point(Panel1.Location.X + 25, Panel1.Location.Y)
    8. If Panel1.Location.X > nEndPos.X Then
    9. Panel1.Location = nStartPos
    10. End If
    11. End Sub
    12. Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
    13. tmrTempo.Stop()
    14. Panel1.Location = nStartPos
    15. End Sub
    16. Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
    17. Panel1.Location = nStartPos
    18. tmrTempo.Start()
    19. End Sub
    20. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    21. Panel1.Location = nStartPos
    22. End Sub
    23. End Class

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

    Guten Abend toto

    Ich würde das so machen

    Eine eigene Funktion für die Oszillation mit einem Schalter für den Vorlauf oder Rücklauf.
    z.b.

    VB.NET-Quellcode

    1. Private bolReversing As Boolean = False


    In der Funktion nimmst du die X-Position des Panels ab und schaust ob er sich im Vorlauf oder im Rücklauf befindet

    Sofern Vorlauf zählst du die Breite des Panels dazu und macht nochmals eine It-Then-Else in dem du dann die neue Position des Panels setzt. (Sofern der neue Standpunkt ausserhalb der Form wäre natürlich Else: bolReversing=true)

    Sofern Rücklauf genau gleich einfach ohne Breite des Panels. d.h. sofern also beim Rücklauf die X-Panel-Pos unter 0 kommt muss bolReversing=false gesetzt werden.

    Das war die ganze Hexerei

    Freundliche Grüsse

    exc-jdbi


    Edit: Sorry VB1963 war schneller mit der Lösung
    Hallo Corby,

    VB.NET-Quellcode

    1. If Panel1.Location = New Point(nEndPos.X) Then
    2. Panel1.Location = New Point(nStartPos.X)
    3. End If

    das hatte ich schon

    .....was meinst du mit vergleichen?...

    @ exc-jdbi
    Das war die ganze Hexerei


    @ Corby
    ..Vergleichen.....mist nicht =

    @ Rod
    Danke auch für dein Vorschlag
    Ggf. musst Du <= durch < und >= durch > ersetzen.


    @ VB1963
    If Panel1.Location.X > nEndPos.X Then


    Das war der Schuldige " > "

    Es war sehr nett und interessant.
    Danke an alle


    Wo kann man "Als ereledigt markieren?"
    lg toto

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „toto“ ()

    Also hier mal ein Beispiel für die Ossilierende Bewegung den Rest kannst du sicher selber machen
    Di kannst sogar während dem LAufen die Formgrösse ändern und die Bewegung passt sich an

    Freundliche Grüsse

    exc-jdbi
    Dateien
    • Oszillation.zip

      (3,31 kB, 118 mal heruntergeladen, zuletzt: )