Toolbox oder so ne Art Midi Application

czemmel

Mitglied
Hallo zusammen,
nachdem ich lange weg war, stürze ich mich nun voll ins geschehen und hab da gleich was .

Also, ich möchte eine Application schreiben in der ich in einer Form eine sog. Toolbox habe (z.B. eine Form mit Button usw.) und eine zweite leere Form.

Nun möchte ich den Button auf die zweite Form mit drag and drop ziehen.

so was ähnliches habe ich schon, leider kann man hier nur innerhalb einer Form die controls verschieben:

Code:
Public Class Form1
    Inherits System.Windows.Forms.Form

    Private mLoading As Boolean = True

#Region " Vom Windows Form Designer generierter Code "

    Public Sub New()
        MyBase.New()

        ' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
        InitializeComponent()

        ' Initialisierungen nach dem Aufruf InitializeComponent() hinzufügen

    End Sub

    ' Die Form überschreibt den Löschvorgang der Basisklasse, um Komponenten zu bereinigen.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    ' Für Windows Form-Designer erforderlich
    Private components As System.ComponentModel.IContainer

    'HINWEIS: Die folgende Prozedur ist für den Windows Form-Designer erforderlich
    'Sie kann mit dem Windows Form-Designer modifiziert werden.
    'Verwenden Sie nicht den Code-Editor zur Bearbeitung.
    Friend WithEvents Label1 As System.Windows.Forms.Label
    Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox
    Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
    Friend WithEvents CheckBox1 As System.Windows.Forms.CheckBox
    Friend WithEvents CheckBox2 As System.Windows.Forms.CheckBox
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Label1 = New System.Windows.Forms.Label
        Me.GroupBox1 = New System.Windows.Forms.GroupBox
        Me.CheckBox2 = New System.Windows.Forms.CheckBox
        Me.CheckBox1 = New System.Windows.Forms.CheckBox
        Me.TextBox1 = New System.Windows.Forms.TextBox
        Me.GroupBox1.SuspendLayout()
        Me.SuspendLayout()
        '
        'Label1
        '
        Me.Label1.AutoSize = True
        Me.Label1.BackColor = System.Drawing.Color.Red
        Me.Label1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.Label1.ForeColor = System.Drawing.Color.Yellow
        Me.Label1.Location = New System.Drawing.Point(12, 9)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(65, 22)
        Me.Label1.TabIndex = 0
        Me.Label1.Text = "Label1"
        '
        'GroupBox1
        '
        Me.GroupBox1.Controls.Add(Me.CheckBox2)
        Me.GroupBox1.Controls.Add(Me.CheckBox1)
        Me.GroupBox1.Location = New System.Drawing.Point(144, 72)
        Me.GroupBox1.Name = "GroupBox1"
        Me.GroupBox1.Size = New System.Drawing.Size(216, 96)
        Me.GroupBox1.TabIndex = 1
        Me.GroupBox1.TabStop = False
        Me.GroupBox1.Text = "GroupBox1"
        '
        'CheckBox2
        '
        Me.CheckBox2.Location = New System.Drawing.Point(16, 64)
        Me.CheckBox2.Name = "CheckBox2"
        Me.CheckBox2.Size = New System.Drawing.Size(88, 16)
        Me.CheckBox2.TabIndex = 1
        Me.CheckBox2.Text = "CheckBox2"
        '
        'CheckBox1
        '
        Me.CheckBox1.Location = New System.Drawing.Point(16, 40)
        Me.CheckBox1.Name = "CheckBox1"
        Me.CheckBox1.Size = New System.Drawing.Size(88, 16)
        Me.CheckBox1.TabIndex = 0
        Me.CheckBox1.Text = "CheckBox1"
        '
        'TextBox1
        '
        Me.TextBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.TextBox1.Location = New System.Drawing.Point(328, 224)
        Me.TextBox1.Name = "TextBox1"
        Me.TextBox1.Size = New System.Drawing.Size(160, 26)
        Me.TextBox1.TabIndex = 2
        Me.TextBox1.Text = "TextBox1"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(520, 269)
        Me.Controls.Add(Me.TextBox1)
        Me.Controls.Add(Me.GroupBox1)
        Me.Controls.Add(Me.Label1)
        Me.Name = "Form1"
        Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
        Me.Text = "Form1"
        Me.GroupBox1.ResumeLayout(False)
        Me.ResumeLayout(False)
        Me.PerformLayout()

    End Sub

#End Region

    Private mPos As Point
    Private mOldCursor As Cursor


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim C As Control

        Me.Text = "Controls verschieben: Taste Strg + Linke Maustaste"

        For Each C In Me.Controls
            ' (die in GroupBox1 liegenden Checkboxen sind hiervon nicht betroffen)

            C.Text = "   Move Me ...   "

            ' gemeinsame Ereignisprozeduren für alle direkt  
            ' auf der Form liegenden Controls zuweisen
            AddHandler C.MouseDown, AddressOf Control_MouseDown
            AddHandler C.MouseMove, AddressOf Control_MouseMove
            AddHandler C.MouseUp, AddressOf Control_MouseUp
        Next
    End Sub


    Private Sub Control_MouseDown(ByVal Sender As Object, ByVal E As System.Windows.Forms.MouseEventArgs)
        Dim C As Control

        C = DirectCast(Sender, Control)

        ' akt. Mauszeigerdarstellung merken
        mOldCursor = C.Cursor

        ' akt. Mausposition merken
        mPos = New Point(E.X, E.Y)

        If ModifierKeys = Keys.Control Then
            C.Cursor = Cursors.SizeAll
        End If
    End Sub

    Private Sub Control_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Dim C As Control = DirectCast(sender, Control)
        C.Cursor = mOldCursor
    End Sub

    Private Sub Control_MouseMove(ByVal Sender As Object, ByVal E As System.Windows.Forms.MouseEventArgs)
        ' Control (Sender) verschieben, wenn Strg-Taste + Linke Maustaste
        Dim C As Control
        Dim Left As Integer
        Dim Top As Integer
        Dim MaxX As Integer
        Dim MaxY As Integer

        If ModifierKeys = Keys.Control Then
            If E.Button = MouseButtons.Left Then
                C = DirectCast(Sender, Control)

                C.Cursor = Cursors.SizeAll

                MaxX = Me.ClientSize.Width - C.Width
                MaxY = Me.ClientSize.Height - C.Height

                Left = C.Left + (E.X - mPos.X)
                If Left < 0 Then
                    ' nicht über den linken Rand verschieben
                    Left = 0
                End If
                If Left > MaxX Then
                    ' nicht über den rechten Rand verschieben
                    Left = MaxX
                End If

                Top = C.Top + (E.Y - mPos.Y)
                If Top < 0 Then
                    ' nicht über den oberen Rand verschieben
                    Top = 0
                End If
                If Top > MaxY Then
                    ' nicht über den unteren Rand verschieben
                    Top = MaxY
                End If

                C.Left = Left
                C.Top = Top
                ' das gerade bewegte Control in den Vordergrund bringen
                C.BringToFront()

                ' Controlposition in der Titelleiste der Form anzeigen
                Me.Text = "Left: " & Left.ToString & "; Top: " & Top.ToString
            End If
        End If
    End Sub

    Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Activated
        If mLoading Then
            mLoading = False
            MsgBox("Drücken Sie die Strg-Taste + Linke Maustaste" & ControlChars.CrLf & _
                       "zum Verschieben der Controls", MsgBoxStyle.Information)
            Me.BringToFront()
        End If
    End Sub
End Class

Nutze VisualStudio 2005

bin für jede Hilfe offen

Danke Czemmel
 

Neue Beiträge

Zurück