Picturebox Inhalt mit Maus verschieben

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Vitox.

    Picturebox Inhalt mit Maus verschieben

    Hallo Community,

    Ich würde gerne wissen, wie ich es hinkriege den Inhalt eines Picturebox mit der Maus zu verschieben.
    Ich habe eine Picturebox die beispielsweise 500x500 groß ist. Darin befindet sich ein Bild das meinetwegen
    1000x1000 groß ist. Jetzt möchte ich aber nicht die Picturebox an die größe anpassen und auch nicht das Bild sonder das man
    mit gedrückter Maustaste den Inhalt, also das Bild verschieben können.

    Wäre das Möglich? Wenn ja, wie?


    Flutschi..

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

    dazu musst du im MouseDown event die Verschiebung erlauben, und diese im MouseMove Event mit Hilfe von Veraändern der Location des Bildes im Verhältnis zur Mausposition durchführen, und im MouseUpEvent das verschieben wieder verbieten

    Gruß vitox
    Im Mouse Down event des Panels den Timer aktivieren
    und im Timer die Location des Panels auf Mausposition in der FOrm zuzweisen
    Me.PointToCLient...

    Edit
    Genauer:

    VB.NET-Quellcode

    1. MouseMove event:(Zuerst ganz oben dass deklinieren: Dim p As Point)
    2. p = Me.PointToCLient(MousePosition)
    3. Timer:
    4. Panel1.Location = New Point(p)
    5. Ach ja im Mouse Up Event-Panel:
    6. Timer1.Stop ;)
    1. doch kann man, des geht sogut wie in jedem sichtbaren Steuerelement
    2. des was ich gesagt habe geht auch so ähnlich, bloß das das Bild halt immer eu gezeichnet werden sollte an der neuen Stelle, dazu lässt du es im PaintEvent eifach an Stelle einer Variable zeichnen, die du dann verändern kannst

    und ich glaube MouseMove ist besswer als ein Timer

    Gruß Vitox
    @Vitox,
    auch wenn die Vorgehensweise mit dem Boolean Verschieben ein/Aus richtig ist: Seit wann hat ein Bild in der PB eine Eigenschaft Location?

    Das beste ist, du bedienst dich für die Verschiebeaktion des Paint-Events deiner PB und zeichnest das Bild auf deine PB (nicht das Bild als Image-Eigenschaft verwenden). In der DrawImage-methode der Graphics-Klasse gibst du die Position des Bildes als Point an. Im MouseMove errechnest du die neue Position an Hand der letzten Verschiebung und forderst mit PB.Invalidate() das Zeichnen an.
    Noch besser ist es, wenn du das Bild direkt auf die Form zeichnest. Die Drawimage-Methode hat übrigens zahlreiche Überladungen die zoomen und vieles mehr erlauben...

    Fiel Fergnügen
    Vatter

    PS. Timer ist dafür absoluter Humbug.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

    Vatter schrieb:

    @Vitox,
    auch wenn die Vorgehensweise mit dem Boolean Verschieben ein/Aus richtig ist: Seit wann hat ein Bild in der PB eine Eigenschaft Location?

    Das beste ist, du bedienst dich für die Verschiebeaktion des Paint-Events deiner PB und zeichnest das Bild auf deine PB (nicht das Bild als Image-Eigenschaft verwenden). In der DrawImage-methode der Graphics-Klasse gibst du die Position des Bildes als Point an. Im MouseMove errechnest du die neue Position an Hand der letzten Verschiebung und forderst mit PB.Invalidate() das Zeichnen an.
    Noch besser ist es, wenn du das Bild direkt auf die Form zeichnest. Die Drawimage-Methode hat übrigens zahlreiche Überladungen die zoomen und vieles mehr erlauben...

    Fiel Fergnügen
    Vatter

    PS. Timer ist dafür absoluter Humbug.


    Vitox schrieb:

    2. des was ich gesagt habe geht auch so ähnlich, bloß das das Bild halt immer eu gezeichnet werden sollte an der neuen Stelle, dazu lässt du es im PaintEvent eifach an Stelle einer Variable zeichnen, die du dann verändern kannst

    und ich glaube MouseMove ist besswer als ein Timer

    Gruß Vitox


    irgendwie hab ich genau das 2 Post vorher gesagt, hast du des nicht gelesen?

    Gruß Vitox