Form ohne Rahmen ohne aufwendige APIs verschieben

  • VB.NET

    Form ohne Rahmen ohne aufwendige APIs verschieben

    Hi @ all,

    ich habe eine frage: wie verschiebe ich eine form, welche keine rahmen hat(Borderstyle = none)

    ich habe bereits folgenden code, der funktioniert:

    VB.NET-Quellcode

    1. Private Sub form_move()
    2. Do
    3. If mouse_down = True Then
    4. point_mouse = Cursor.Position
    5. Me.Location = point_mouse
    6. End If
    7. Loop
    8. End Sub


    das ganze läuft über die events mousedown und mouse up

    aber egal wo ich auf der form hinklicke klebt die form dann mit der linken oberen ecke an der maus... wie bekomme ich es hin, dass sich die form verschieben lässt, auch wenn ich den mauszeiger meinetwegen unten rechts ansetzte. im aktuellen fall hängt die form dann wieder mit der oberen linken ecke an der maus...

    schon mal ty for helping me

    KnifeHunter
    aka. EsTari
    Ein Wert des Typs "1-dimensionales Array von 1-dimensionales Array von Byte" kann nicht in "1-dimensionales Array von Byte" konvertiert werden, da "1-dimensionales Array von Byte" nicht von "Byte" abgeleitet ist.
    :D :love: 8| ?( -> VB.NET FTW -> Der epischste Fehler, den wir je hatten ;)
    @ SystemUnknow -> keine aufwändigen APIs bitte danke einfach C&P nein danke, da ich es nicht verstehe - außerdem will ich eine eigene funktion, die ich nach belieben anpassen kann. das kann ich bei der API nicht, da ich erstmal kapieren müsste, wie das alles funzt. X(

    @ Samus Aran -> Glaubst du wirklich, dass ich das nicht schon längst gemacht habe? - ich habe an den 2 positionen rumaddiert und subtrahiert und bin trotz dem nicht weiter... wenn ich da so einfach selbst draufkommen würde, dann würde ich sicher nicht hier rumposten X(

    eure beiträge helfen mir nicht im geringsten - tut mir leid.
    Ein Wert des Typs "1-dimensionales Array von 1-dimensionales Array von Byte" kann nicht in "1-dimensionales Array von Byte" konvertiert werden, da "1-dimensionales Array von Byte" nicht von "Byte" abgeleitet ist.
    :D :love: 8| ?( -> VB.NET FTW -> Der epischste Fehler, den wir je hatten ;)
    Klick MIch
    So villeicht? ;)

    lg

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

    VB.NET-Quellcode

    1. Dim StartPosition As Point
    2. Dim DragPosition As Point
    3. Public Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
    4. If e.Button = Windows.Forms.MouseButtons.Left Then
    5. StartPosition = Me.Location
    6. DragPosition = Me.PointToScreen(New Point(e.X, e.Y))
    7. End If
    8. End Sub
    9. Public Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
    10. If e.Button = Windows.Forms.MouseButtons.Left Then
    11. Dim CursorPosition As Point = Me.PointToScreen(New Point(e.X, e.Y))
    12. Me.Location = New Point(StartPosition.X + CursorPosition.X - DragPosition .X, _
    13. StartPosition.Y +CursorPosition.Y - DragPosition .Y)
    14. End If
    15. End Sub


    Gruß Vitox
    Gruß Vitox
    Arbeitet hier eigentlich jemand richtig mit Visual Studio?
    Eigentlich sollte man davon ausgehen, dass man sein Werkzeug kennt.

    VS hat ein Feature an Board, welches für genau solche Kleinigkeiten (die 2x im Monat hier gefragt werden) Lösungen bereit hält.
    Code-Snippets. Rechte Maustaste im Code-Fenster, "Ausschnitt einfügen".
    Bilder
    • Ziehen.jpg

      76,01 kB, 1.028×285, 1.387 mal angesehen
    Ich benutze zum verschieben für gewöhnlich folgenden Code. Ist zwar mittels API, aber aufwändig is anders.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. #Region "API-Funition zum Verschieben der Form"
    3. Public Declare Function ReleaseCapture Lib "user32" () As Integer
    4. Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByRef lParam As Object) As Integer
    5. Public Const WM_NCLBUTTONDOWN = &HA1
    6. Public Const HTCAPTION = 2
    7. #End Region
    8. #Region "Form verschieben"
    9. Private Sub Label1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseDown
    10. 'Form verschieben ermöglichen
    11. ReleaseCapture()
    12. SendMessage(CInt(Handle), WM_NCLBUTTONDOWN, HTCAPTION, 0)
    13. End Sub
    14. #End Region
    15. End Class

    Die Form kann verschoben werden, indem der folgende Code in das Mouse_Down Event des zum Verschieben bevorzugte Controls geschrieben wird. (Zumindest dürfte er dort am Sinnvollsten aufgehoben sein)
    Sollen mehrere Controls das verschieben ermöglichen, kannst du diese bei Handles mit eintragen.

    VB.NET-Quellcode

    1. ReleaseCapture()
    2. SendMessage(CInt(Handle), WM_NCLBUTTONDOWN, HTCAPTION, 0)


    //Edit Als Public Deklariert, weil ich die API Deklaration oft in einem Modul vornehme und sie dann für alle zum Projekt gehörigen Fenster benutzbar ist.

    Mdesktool - RAM und CPU Info

    Teatimer

    "Ich hab da mal was vorbereitet..."
    Mhmm Danke bin erst kurz in VB.

    War aber nicht die Form sondern Panel1 wie geht das jetzt ?
    Habe bei den Code auschnitten nichts gefunden
    „Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.“
    Albert Einstein

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Björn“ ()

    Du weißt aber das der Thread schon 1 Jahr alt ist?
    Grüße
    Du bist jemand, der meinen Beitrag liest. Du verwendest einen Browser und dieser Beitrag wurde vermutlich zuletzt von dir gelesen.
    Dynamische Counter hab ich nicht nötig.

    >> Wer glaubt, dass Abteilungsleiter Abteilungen leiten, glaubt auch, dass Zitronenfalter Zitronen falten.
    >> Spezialisten sind Leute, die immer mehr über immer weniger wissen, bis sie alles über nichts wissen.

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!