Per Code erstellte Form bewegen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von sebbe232.

    Per Code erstellte Form bewegen

    Hey...

    Ich habe eine Form per Code erstellt die erscheint wenn ich auf einen Button klicke...

    Der Formborderstyle ist auf None gesetzt...

    Wie bekomme ich es jetzt hin das ich die form per Maus bewege ?


    hier mal mein Code ^^


    VB.NET-Quellcode

    1. Dim form As Form
    2. For i As Integer = 1 To 1
    3. form = New Form()
    4. form.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    5. form.Width = 150
    6. form.Height = 150
    7. form.StartPosition = FormStartPosition.CenterScreen
    8. form.Show()
    9. Next



    Hoffe auf Hilfe ^^

    VB.NET-Quellcode

    1. Private Overloads Sub OnMouseDown(ByVal Sender As System.Object, ByVal e As _
    2. System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
    3. MyClass.MouseButton = e.Button()
    4. With MyClass.CurrentPosition
    5. .X = e.X()
    6. .Y = e.Y()
    7. End With
    8. End Sub
    9. Private Overloads Sub OnMouseUp(ByVal Sender As System.Object, ByVal e As _
    10. System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
    11. MyClass.MouseButton = Nothing
    12. End Sub
    13. Private Overloads Sub OnMouseMove(ByVal Sender As System.Object, ByVal e As _
    14. System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
    15. Select Case MyClass.MouseButton
    16. Case Is = MouseButtons.Left
    17. MyClass.Top = MyClass.Cursor.Position.Y() - _
    18. MyClass.CurrentPosition.Y()
    19. MyClass.Left = MyClass.Cursor.Position.X() - _
    20. MyClass.CurrentPosition.X()
    21. Case Is = Nothing
    22. Exit Sub
    23. End Select
    24. End Sub
    Meine Projekte:

    WizSearch: 100%
    Ansehen

    VB.NET-Quellcode

    1. Private CurrentPosition As New System.Drawing.Point
    2. Private MouseButton As System.Windows.Forms.MouseButtons = Nothing
    3. Private Sub Form1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
    4. MyClass.MouseButton = e.Button()
    5. With MyClass.CurrentPosition
    6. .X = e.X()
    7. .Y = e.Y()
    8. End With
    9. End Sub
    10. Private Sub Form1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
    11. Select Case MouseButton
    12. Case Is = Windows.Forms.MouseButtons.Left
    13. MyClass.Top = Windows.Forms.Cursor.Position.Y() - MyClass.CurrentPosition.Y()
    14. MyClass.Left = Windows.Forms.Cursor.Position.X() - MyClass.CurrentPosition.X()
    15. Case Is = Nothing
    16. Exit Sub
    17. End Select
    18. End Sub
    19. Private Sub Form1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
    20. MyClass.MouseButton = Nothing
    21. End Sub
    Weis jetzt nicht wie ich es sagen soll :D

    Bei einer normalen Form(die nicht per Code gemacht wurde) gibt es ja die Events Mouse_Down und Mouse_Move


    VB.NET-Quellcode

    1. Private Sub Form1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
    2. End Sub
    3. Private Sub Form1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
    4. End Sub


    aber bei der selbst gemachten sag ich jetzt mal gibt es die ja nicht(verbessert mich wenn doch ^^) darum helfen mir die Codes so nicht :/

    Brauche halt auch diese Event´s aber weiß nicht wie ich die mache...
    Das kannst du mit AddHandler machen. Dann übergibst du beispielsweise eine anonyme Funktion. Hier mal ein Beispiel:

    VB.NET-Quellcode

    1. Public Sub ShowForm()
    2. Dim frm As New Form
    3. AddHandler frm.FormClosing, Sub(sender As Object, e As FormClosingEventArgs)
    4. If MessageBox.Show("Wollen sie das Fenster wirklich schließen?", "", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then
    5. e.Cancel = True
    6. End If
    7. End Sub
    8. frm.Show()
    9. End Sub

    Hier habe ich eine Sub ShowForm, diese führt alles aus. Dort deklariere ich erstmal unsere Form, dann rufe ich AddHandler auf. Was das Ding macht ist: Es weist dem Event FormClosing unserer erstellten Form eine anonyme Sub zu, die hinter dem Komma. Diese hat die Signatur sender As Object, e As FormClosingEventArgs, diese entspricht der Signatur des Events. Die Signatur für MouseDown beispielsweise ist sender As Object, e As System.Windows.Forms.MouseEventArgs. Gehen wir aber weiter im Code. Diese Sub wird also nun aufgerufen, sobald das Event FormClosing auftritt, jetzt können wir noch unseren Code einfügen: Da ich in meinem Beispiel fragen möchte, ob sich das Fenster wirklich schließen soll, zeige ich eine MessageBox, prüfe, was das Ergebnis ist und schaue dann, ob die Form wirklich geschlossen werden soll.
    Das ist zwar nicht genau das, was du wolltest, aber wenn du es dir mal anschaust, wirst du sicher herausfinden, wie du den Code von Jonas Jelonek in mein System einfügen kannst :).
    MfG Stefan

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Dim form As Form
    4. For i As Integer = 1 To 1 'Auch wenn ich den Sinn der Schleife nicht ganz nachvollziehen kann
    5. form = New Form()
    6. form.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    7. form.Width = 150
    8. form.Height = 150
    9. form.StartPosition = FormStartPosition.CenterScreen
    10. form.Show()
    11. Next
    12. End Sub
    13. End Class
    14. Public Class Form
    15. Inherits Windows.Forms.Form
    16. Protected Overrides Sub WndProc(ByRef m As Message)
    17. If m.Msg = &H84 Then
    18. m.Result = New IntPtr(2)
    19. Else
    20. MyBase.WndProc(m)
    21. End If
    22. End Sub
    23. End Class


    Events bekommst du übrigens entweder mit Addhandler (siehe oben) oder indem du ausserhalb der Sub die Form deklarierst und ein withevents miteinfügst.
    Ist doch dasselbe, stattdessen erstellt er halt ein Object von der Klasse Form, anstatt einer Form und wenn er eine Form mit VS erstellen würde, würde er trotzdem auf das gleiche Problem stoßen. Ausserdem ginge das hier auch:

    VB.NET-Quellcode

    1. e.Cancel = MessageBox.Show("Wollen sie das Fenster wirklich schließen?", "", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No


    statt vorher abzufragen.

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

    Dass das auch geht ist mir klar, ich mache bei kleineren Projekten extrem oft Einzeiler. Jedoch ist das so übersichtlicher und ich denke mal, dass der TE noch nicht so viel Erfahrung mit VB hat.
    Hey...

    Zuerst mal Danke für die viele Hilfe ^^

    alsoooo ich hab es fast hinbekommen nur das sich nicht die erstellte Form bewegt sondern die Form die,die Form per Button erstellen soll...


    VB.NET-Quellcode

    1. Public Sub ShowForm()
    2. Dim form As New Form
    3. form = New Form()
    4. form.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    5. form.StartPosition = FormStartPosition.CenterScreen
    6. form.Width = 150
    7. form.Height = 150
    8. form.Show()
    9. picbox()
    10. form.Show()
    11. Me.Close()
    12. For i As Integer = 1 To 1
    13. AddHandler form.MouseDown, Sub(sender As Object, e As System.Windows.Forms.MouseEventArgs)
    14. X = Control.MousePosition.X - Me.Location.X
    15. Y = Control.MousePosition.Y - Me.Location.Y
    16. End Sub
    17. AddHandler form.MouseMove, Sub(sender As Object, e As System.Windows.Forms.MouseEventArgs)
    18. If e.Button = Windows.Forms.MouseButtons.Left Then
    19. NewPoint = Control.MousePosition
    20. NewPoint.X -= (X)
    21. NewPoint.Y -= (Y)
    22. Me.Location = NewPoint
    23. End If
    24. End Sub
    25. Next
    26. End Sub


    bitte noch einmal um Hilfe :S
    Was soll der ganze Ranz? Erstell Dir eine Form im Designer, leg die Properties (FormBorderStyle usw.) fest und implementiere die Funktionalität in dieser Klasse.

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private _drag As Boolean = False
    3. Private _pos As Point
    4. Private Sub Form2_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown
    5. If e.Button = Windows.Forms.MouseButtons.Left Then
    6. _drag = True
    7. _pos = e.Location
    8. End If
    9. End Sub
    10. Private Sub Form2_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove
    11. If _drag Then
    12. Me.Location = New Point(Me.Location.X + e.X - _pos.X, Me.Location.Y + e.Y - _pos.Y)
    13. End If
    14. End Sub
    15. Private Sub Form2_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp
    16. If _drag AndAlso e.Button = Windows.Forms.MouseButtons.Left Then
    17. _drag = False
    18. End If
    19. End Sub
    20. End Class


    Aus dem "Hauptprogramm" erstellst Du einfach so viele Instanzen, wie es Dir beliebt.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim f2 As New Form2
    4. f2.Show()
    5. End Sub
    6. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o