Picturebox mit Maus Steuern Wie?

  • VB.NET

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

    Picturebox mit Maus Steuern Wie?

    Hallo,
    ich habe eine Picturebox und halt die Maus :D
    Und jetzt will ich das die Picturebox immer an der Position von der Maus ist.
    Soweit bin ich schon:
    Ich habe das ganze in einem Timer damit auch die Picturebox immer die Postion wechselt.

    VB.NET-Quellcode

    1. PictureBox1.Location = New Point(PictureBox1.Location.X = MousePosition.X, PictureBox1.Location.Y = MousePosition.X)

    Wieso Funktioniert das nicht?

    Grüße GMT
    Öhm.

    VB.NET-Quellcode

    1. PictureBox1.Location = New Point(MousePosition.X, MousePosition.Y)
    oder gleich

    VB.NET-Quellcode

    1. PictureBox1.Location = MousePosition
    Ja, MousePosition gibt auch die Position des Cursors relativ zum linken oberen Bildschirmrand zurück.
    Wenn dein Code im MouseMove-Event ist, was ich annehme, dann probiere es so:

    VB.NET-Quellcode

    1. PictureBox1.Location = e.Location
    Nein es ist in einem Timer-Event, da ich ja die Location der Picturebox sozusagen immer Aktualisieren will.

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. PictureBox1.Location = New Point(MousePosition.X, MousePosition.Y)
    3. End Sub
    Habe das soeben ausprobiert.
    Das MouseMove-Event des Forms wird nicht gefeuert, wenn sich die Maus auf der PictureBox befindet.
    Nach zahlreichen Versuchen, von denen

    VB.NET-Quellcode

    1. Private Sub Foo(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseMove, PictureBox1.MouseMove
    2. PictureBox1.Location = DirectCast(sender, Control).PointToClient(Control.MousePosition)
    3. End Sub

    der beste war bleibt mir nur zu sagen: Eine PictureBox ist dafür nicht geeignet.
    Das Ganze lässt sich möglicherweise auch mit GDI+ realisieren, was dann auch performanter ist. Das hängt aber vom Zweck des Programmes ab.

    Edit:
    Mit GDI+ gelöst:

    VB.NET-Quellcode

    1. Dim Bipm As Bitmap
    2. Private Sub Initialize() Handles MyBase.Load
    3. Bipm = New Bitmap(100, 100) 'Das Bild instanzieren, damit man was sieht
    4. Using g As Graphics = Graphics.FromImage(Bipm)
    5. g.FillRectangle(Brushes.Red, 0, 0, 100, 100)
    6. g.FillEllipse(Brushes.Green, 0, 0, 100, 100)
    7. End Using
    8. End Sub
    9. Private Sub Foo() Handles Me.MouseMove
    10. Me.Invalidate()
    11. End Sub
    12. Private Sub Bar(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Me.Paint
    13. e.Graphics.DrawImage(Bipm, Me.PointToClient(Control.MousePosition))
    14. End Sub

    (DoubleBuffered ist auf True gestellt!)

    Das funktioniert perfekt. Und wenn man ein Offset haben will:

    VB.NET-Quellcode

    1. Private Sub Bar(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Me.Paint
    2. e.Graphics.DrawImage(Bipm, Me.PointToClient(New Point(Control.MousePosition.X - Bipm.Width \ 2, Control.MousePosition.Y - Bipm.Height \ 2))) 'Hier die \ beachten!
    3. End Sub
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

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