Pictureboxverschiebung eingrenzen

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von phil.

    Pictureboxverschiebung eingrenzen

    Hallo ich bin auf ein zweites Problem gestoßen.

    Erstmal, was mache ich:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim x = Windows.Forms.Cursor.Position.X - 600
    3. Dim y = Windows.Forms.Cursor.Position.Y - 400
    4. Windows.Forms.Cursor.Position = New Point(600, 400) 'Cursor zurücksetzen
    5. PictureBox1.Top = PictureBox1.Top - y
    6. PictureBox1.Left = PictureBox1.Left - x
    7. End Sub

    Ich lasse eine Picturebox sich mit der Maus bewegen. Das funktioniert auch ganz gut, aber jetzt möchte ich dass ich die PictureBox sich nicht weiter bewegt, wenn der Rand erreicht ist:

    VB.NET-Quellcode

    1. If PictureBox1.Top > 400 Then
    2. PictureBox1.Top -= 5
    3. Else
    4. PictureBox1.Top = PictureBox1.Top - y
    5. End If

    (erstmal am oberen Rand)
    Problem:

    Wenn ich jetzt mit der Maus nach oben will stoppt es :)
    Aber: nicht an der richtigen Stelle :whistling:
    Später habe ich festgestellt, dass nach jedem Programmstart die Grenze an einer anderen Stelle ist ?(
    Und wenn man zwei mal nacheinander (ohne Programmstart dazwischen) gegen die Grenze stößt ist sie an der selben Stelle. ?( ?(



    Ich habe keine Ahnung woran es liegt. Könnt ihr mir bitte helfen?

    p.s. der Texteditor ist ja richtig blöd
    warum prüfste nicht im timer tick event ob die mouse location auserhalb des bereiches ist und setzt dies/die box dann zurück ?

    aber BTW was hast du eigentlich vor wenns ein spiel weden soll weg mit dem müll und GDI nutzen

    EDIT:
    *.top > 400 soltest du nochmal überdenken
    wenn bla.oben größer als 400 dann setze bla.oben - 5
    Das habe ich auch schon versucht, aber nach wohin soll ich die Picturebox zurücksetztn? Deshalb war meine Idee, dass ich mich immer in 5er Schritten rantaste, bis ich wieder in der Picturebox drin bin.

    Das funktioniert auch super. Mein Problem war dass er sich immer eine andere Grenze aussucht.

    Trotzem danke!
    Gerne
    also du sagst sozusagen das sobald der obere rand (*.top) > als 400 ist soll dieser -5 genommen werden

    also
    401 -> 396
    403 -> 398
    etc.

    ich vermute das du da nen denkfehler gehabt hast kp warum O.o
    lösung des problems ist aus dem > ein < zu machen
    dann wäre das ergebnis:

    396 -> 401
    398 -> 403

    so würde deine box runtergesetzt werden da der obere bildschirmrand 0 ist in der y achse (der linke 0 in der x achse)

    noch fragen ?

    EDIT:
    das wären eigentlich grundlagen O.O
    Nein, das ist nicht der Fehler. Ich habe es ausprobiert.
    Meiner meinung nach ist es so:
    399-> im richtigen Bereich
    400-> zu weit oben -> es wird nach unten versetzt

    Hast du eine Idee, woran es sonst hängen könnte?
    Ich habe noch etwas bemerkt: je schneller ich beim ersten Mal die Grenze überschreite, desto weiter außen liegt sie.
    Das habe ich auch schon probiert.
    Ich habe es mit allen Varienten versucht und nur meine anfängliche hat funktioniert.
    aber eigentlich ist es doch logisch, wie es war:
    .top > 400 (z.B. 403)
    dann .top-5 (also 398)

    es muss an etwas anderem liegen
    "es muss an etwas anderem liegen"
    ja daran das du die box nach oben verschiebst anstadt nach unten

    EDIT: hab dir mal ein bild angehängt
    EDIT2: vergiss das bild

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

    ich mächte sie ja auch nach oben verschieben
    wenn der obere Rand der Picturebox erreicht ist, ist sie zu weit unten!

    und außerdem funktioniert in der Hinsicht alles: wenn sie zu weit unten ist wird sie nach oben verschoben(-richtig) nur die Frage, wo "zu weit oben" ist ist anscheinend nicht klar.



    EDIT irgendwie kann ich nicht innerhalb 30 minuten so viele Beiträge schreiben. deshalb schreibe ich jetzt alles in diesen beitrag rein.



    Ich kann mir das Bild nicht größer anschauen.



    ich kann dein Bild gar nicht vergessen, da ich es nicht genau anschauen konnte.

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

    phil schrieb:

    Was ist gdi?
    Diese Frage gehört eigentlich ins Grundlagenforum.
    Graphics Device Interface.
    Alles "von Hand" selber malen, jede Darstellung selbst organisieren, graphische Abläufe selbst optimieren.

    VB.NET-Quellcode

    1. Paint-Event()
    2. Invalidate(...)
    3. Update().
    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!