Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0318: Drag & Drop von UserControls innerhalb eines FlowLayoutPanels

 von 

Hinweis zum Tippvorschlag  

Dieser Vorschlag wurde noch nicht auf Sinn und Inhalt überprüft und die Zip-Datei wurde noch nicht auf schädlichen Inhalt hin untersucht.
Bitte haben Sie ein wenig Geduld, bis die Freigabe erfolgt.

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Steuerelemente

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Drag&Drop, FlowLayoutPanel, UserControl

Der Vorschlag wurde erstellt am: 06.10.2008 01:51.
Die letzte Aktualisierung erfolgte am 06.10.2008 01:51.

Zurück zur Übersicht

Beschreibung  

Erlaubt das Draggen und Droppen von UserControls innerhalb einen FlowLayoutPaneles.

Schwierigkeitsgrad

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [13,68 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' ---- Anfang Projektdatei UserControlDragAndDrop.vbproj  ----
' ------------------ Anfang Datei Form1.vb  ------------------
Public Class Form1

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

        ' Flussrichtung bestimmen
        Me.FlowLayoutPanel1.FlowDirection = FlowDirection.TopDown

        ' UserControls erzeugen
        For i As Integer = 0 To 10

            Dim uD As New UCDragDrop("DragDrop" & i)

            Me.FlowLayoutPanel1.Controls.Add(uD)
        Next

    End Sub

End Class

' ------------------- Ende Datei Form1.vb  -------------------
' ---------------- Anfang Datei UCDragDrop.vb ----------------
Public Class UCDragDrop

    ' Property zum Anzeigen des Textes
    Private _labelText As String

    Public Property labelText() As String
        Get
            Return _labelText

        End Get

        Set(ByVal value As String)
            _labelText = value

            Me.Label1.Text = value

        End Set

    End Property

    ' Konstruktor
    Public Sub New(ByVal labelText As String)

        InitializeComponent()

        Me.labelText = labelText

    End Sub

    Private Sub UCDragDrop_DragEnter(ByVal sender As System.Object, ByVal e As _
        System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter, Label1.DragEnter

        ' Überprüfen, ob ein UCDragDrop-Control gedroppt werden soll
        If e.Data.GetDataPresent(GetType(UCDragDrop)) Then

            Dim uD As UCDragDrop = DirectCast(e.Data.GetData(GetType(UCDragDrop)), UCDragDrop)

            ' Überprüfen, ob es sich um ein anderes Control handelt
            If Not uD.Equals(Me) Then
                e.Effect = DragDropEffects.Move

                Me.BackColor = Color.Yellow
            End If
        End If

    End Sub

    Private Sub UCDragDrop_DragDrop(ByVal sender As System.Object, ByVal e As _
        System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop, Label1.DragDrop

        ' das "gedragte" Control casten
        Dim uD As UCDragDrop = DirectCast(e.Data.GetData(GetType(UCDragDrop)), UCDragDrop)

        ' den Index des Controls bestimmen, auf das gedroppt wird
        Dim destinationIndex As Integer = Form1.FlowLayoutPanel1.Controls.GetChildIndex(Me)

        ' dem gedroppten Control den Index, des Control zuweisen, auf das gedragt wirde
        Form1.FlowLayoutPanel1.Controls.SetChildIndex(uD, destinationIndex)

        ' das Control auf das gedroppt wurde um eins nach unten verschieben
        Form1.FlowLayoutPanel1.Controls.SetChildIndex(Me, destinationIndex + 1)

        Me.BackColor = Color.Black

    End Sub

    Private Sub UCDragDrop_DragLeave(ByVal sender As System.Object, ByVal e As _
        System.EventArgs) Handles MyBase.DragLeave, Label1.DragLeave

        Me.BackColor = Color.Black

    End Sub

    Private Sub UCDragDrop_MouseDown(ByVal sender As System.Object, ByVal e As _
        System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown, Label1.MouseDown

        Me.DoDragDrop(Me, DragDropEffects.Move)

    End Sub

End Class

' ----------------- Ende Datei UCDragDrop.vb -----------------
' ----- Ende Projektdatei UserControlDragAndDrop.vbproj  -----

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.