Mousemove übers Bild (nicht über die ganze Picturebox)

  • VB.NET

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

    Mousemove übers Bild (nicht über die ganze Picturebox)

    Also, ich habe folgendes Problem:

    In meinem Programm gibt es eine Picturebox. Beim herüberfahren über die Picturebox, soll eine andere Picturebox darüber eingeblendet werden, mit der Aufschrift "Vergrößern" um das Bild in Vollbild anzuzeigen. Das Problem ist nur, dass ich vorher noch nicht wissen kann, welche Maße das geladene Bild hat. Da die Picturebox auf "Zoom" eingestellt wird, gibt es dann zum Beispiel einen Rand oben und unten vom Bild, sodass das Ereignis Mouse_Over auch ausgelöst wird, wenn man mit der Maus gar nicht über das Bild selber geht.

    Gibt es ein Ereignis nur für Mouse_Over das Bild?

    Meine Idee war, dass man die Größe Picturebox auf die Größe des Bildes verkleinert. Das klappt auch, jedoch funktioniert es nicht wenn ich den Code dazu in den Form1_Load Sub reinschreibe, ich denke das liegt daran, dass die Bildinfos noch nicht geladen sind. Es funktioniert aber, wenn ich den Code zum Beispiel ind das Ereignis Form1_MouseOver reinkopiere. Dann wird das Bild aber neu geladen, und ein unsauberes ruckeln entsteht und außerdem ist es Möglich über das Bild zu gehen ohne über die Form selbst zu "MouseOvern". Gibt es den nicht irgendwie ein Ereignis wie "FormLoaded", sodass also alle Elemente schon geldaden sind? Oder habt ihr andere Ideen?

    Entschuldigt bitte meine Fehler, ich benutze dieses Forum zum erten Mal. Ich hoffe ihr habt Antworten, auf jeden Fall schon mal Danke! :thumbsup:

    MFG,

    iBasic

    iBasic schrieb:

    In meinem Programm gibt es eine Picturebox. Beim herüberfahren über die Picturebox, soll eine andere Picturebox darüber eingeblendet werden, mit der Aufschrift "Vergrößern" um das Bild in Vollbild anzuzeigen.

    wo willst du die annere Picbox einblenden? Über dem Bild? Dann kannst du aber nicht mehr mit der Maus über das Bild fahren, denn da ist ja (zumindest teilweise) nun die annere PB davor.
    ausserdem sind Pictureboxen für Bilder da, nicht für aufschriften.

    Mir scheint, eine bessere Lösung wäre, der Picturebox einfach einen Tooltip mit "Vergrößern" angedeihen zu lassen, und bei Picturebox_Mousedown dann halt das VergrößerungsForm öffnen.
    Erstmal vielen Dank für deine Antwort :thumbup:
    Keine schlechte Idee, mit Tooltips hatte ich vorher noch nie gearbeitet. Das eigentliche "Problem" ist damit ja aber noch nicht gelöst:

    Der Tooltip wird auch angezeigt, wenn ich mit der Maus neben dem Bild bin, da das Bild ja nicht die genaue Größe der PicBox besitzt. Wenn man jetzt neben das Bild klickt, wird auch der Vollbildmodus aufgerufen.

    Gibt es denn kein Ereignis wie beim Webbrowser "Document_Completet"?
    Also: Ich das liegt ja logischerweiße dann daran, weil die Picturebox größer als das Bild ist. Entweder lädst du das Bild einfach so in die Picturebox, dass diese so groß wie das Bild ist, oder du prüfst wie groß das Bild ist und zeichnest dann das Vergrößern-Symbol da drauf.
    Es gibt sicherlich einfache Möglichkeiten das zu lösen, aber ich arbeite leider nicht mit der Zoom-Eigenschaft und kann dir deshalb keinen fertigen Code geben. Sry
    Ich kenne die Funktion "Zoomen" nicht, deshalb hatte ich ja versucht, sie manuell zu ersetzten indem ich einfach die Größe der Picturebox auf die Größe des Bildes verkleinert hab. Danach musste ich die Picturebox allerdings wieder verschieben, da sie sich durch das verkleinern ja nicht bewegt und so das Bild im Endeffekt weiter links befindet. Wie auch immer, diesen Code hab ich dann ins Form1_Load Ereignis kopiert, wobei ich dann beim Aufrufen immer folgende Fehlernachricht bekomme: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

    Wenn ich den Code jedoch in ein Ereignis nach dem Laden kopiere funktioniert es, es jedoch ist dann die Frage, welches Ereignis ich wählen kann, das direkt nach dem Laden eintritt. Am Ende habe ich jetzt einfach einen Timer genommen und eine zehntel Sekunde nach dem Laden wird die PictureBox verkleinert.
    Da die Ladezeit nunmal aber von PC zu PC unterschiedlich ist, würde ich es bevorzugen wenn ich eine bessere Lösung finde. Vielleicht funktioniert es ja mit "Zoomen". Da ich jedoch ka hab was ihr damit meint, würde ich mich freuen, wenns mir einer erklären könnte.
    OK weil ich nicht so gut im erklären bin, mal ein Beispiel.
    Mach mal eine leere Form und kopier den Code da rein.

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Class Form1
    4. Dim PB_Size As New Size(100, 100)
    5. Dim PB_Location As New Point(50, 50)
    6. Dim WithEvents PB As New PictureBox
    7. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    8. Me.Controls.Add(PB)
    9. With PB
    10. .Image = My.Resources.Humpback_Whale
    11. .SizeMode = PictureBoxSizeMode.Zoom
    12. .Location = New Point(50, 50)
    13. .Size = PB_Size
    14. End With
    15. End Sub
    16. Private Sub PB_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles PB.MouseHover
    17. With PB
    18. .Size = New Size(200, 200)
    19. End With
    20. End Sub
    21. Private Sub PB_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles PB.MouseLeave
    22. With PB
    23. .Size = PB_Size
    24. .Location = PB_Location
    25. End With
    26. End Sub
    27. End Class


    Nu müsstest du erkennen was ich meine.

    ansonsten frag nochmal nach.