Tipp-Upload: VB.NET 0318: Drag & Drop von UserControls innerhalb eines FlowLayoutPanels
von Samael
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.
Beschreibung
Erlaubt das Draggen und Droppen von UserControls innerhalb einen FlowLayoutPaneles.
Schwierigkeitsgrad |
Verwendete API-Aufrufe: |
Download: |
' 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.