UserForm Positionieren an Cursor-Position

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    UserForm Positionieren an Cursor-Position

    Hallo,

    um ein Userform an der Cursor-Position einblenden zu lassen, wird folgender Code ausgeführt:

    VB.NET-Quellcode

    1. With myUserForm
    2. .Show()
    3. Dim myCursor = Cursor.Position
    4. myCursor.X -= If(myCursor.X - .Height >= 0, .Height, 0)
    5. myCursor.Y -= If(myCursor.Y - .Width >= 0, .Width, 0)
    6. .Location = myCursor
    7. End With


    Kann mir jemand mitteilen, ob bei der Berechnung der Position eine Umrechnung von Pixel in Points erfolgen muss? Falls Ja, gibt es hierfür eine .net Funktion?

    Bei ersten Testläufen ist mir eine kleine Abweichung zwischen Cursor-Position und des positionierten UserForms aufgefallen. Je nach Auflösung des Bildschirms kann die Abweichung noch auffälliger sein.

    BigBen2003 schrieb:

    Umrechnung von Pixel in Points
    brauchst Du wofür?
    Was sind das für Points?
    Genügt Dir zu wissen, dass das .Rectangle der äußere Rahmen, .ClientRectangle der innere, Cursor-Position-relevante Rahmen ist?
    Sieh Dir mal dies an:

    VB.NET-Quellcode

    1. Dim rc1 = Me.PointToClient(Button1.Location)
    2. Dim rc2 = Me.PointToScreen(Button1.Location)
    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!
    Hallo,

    vielen Dank für die prompte Antwort :)

    Auf Points und Pixel bin ich gekommen, da in diversen Quellen fast immer darin unterschieden wird.

    In diesem Fall wird der Point mit der Position der linken oberen Ecke an die UserForm übergeben. Daher wird ja die Höhe u nd Breite der Userform von der Cursor-Position abgezogen.

    Ich bin mir nicht sicher, ob man die Breite bzw. Höhe einer Userform direkt von einer Position ohne Umrechnung (Pixel/Point) abziehen kann.

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

    @BigBen2003 Ich schlage vor, dass Du (zunächst) Dein Problem in Pixeln löst und hinterher sehen wir, ob ander Zeugs ühaupt notwendig ist.
    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!