Drag'n'Drop
Drag'n'Drop
Textboxen gehören zu den wenigen Kontroll-Elementen, bei denen Drag'n'Drop, also Ziehen und Fallenlassen, einfach programmiert werden kann.
Wenn es nur zwischen zwei Textboxen stattfinden soll, reicht es, die Eigenschaft DragBehaviour = fmDragBehaviorEnabled einzustellen, wie im folgenden Bild und Listing zu sehen ist.
Drag'n'Drop zwischen zwei Textfeldern
Diese Eigenschaft ist nicht zur Entwurfszeit änderbar und muss daher per Code in UserForm_Initialize eingestellt werden.
Private Sub UserForm_Initialize() Me.TextBox1.DragBehavior = fmDragBehaviorEnabled Me.TextBox2.DragBehavior = fmDragBehaviorEnabled End Sub
Die Änderungen des Mauszeigers und das komplette Verhalten erfolgen dabei automatisch, es braucht also keine weitere Programmierung. Das ist doch mal schön einfach, oder?
Textbox und Listbox einsetzen
Der Aufwand ist nur geringfügig höher, um aus einem Textfeld Teile in eine Listbox zu ziehen. Diese kennt zwar die notwendigen Eigenschaften nicht, lässt sich aber recht einfach austricksen, wie das folgende Listing zeigt.
Private Sub ListBox1_BeforeDragOver(ByVal Cancel As _ MSForms.ReturnBoolean, _ByVal Data As MSForms.DataObject, _ ByVal X As Single, ByVal Y As Single, _ ByVal DragState As MSForms.fmDragState, ByVal Effect As _ MSForms.ReturnEffect, _ByVal Shift As Integer) Cancel = True End Sub Private Sub ListBox1_BeforeDropOrPaste(ByVal Cancel As _ MSForms.ReturnBoolean, _ByVal Action As MSForms.fmAction, _ ByVal Data As MSForms.DataObject, _ ByVal X As Single, ByVal Y As Single, ByVal Effect As _ MSForms.ReturnEffect, _ByVal Shift As Integer) Me.ListBox1.AddItem Data.GetText End Sub Private Sub UserForm_Initialize() With Me.ListBox1 .AddItem "rot" .AddItem "gelb" .AddItem "grün" End With Me.TextBox1.DragBehavior = fmDragBehaviorEnabled End Sub
Dabei wird im ListBox1_BeforeDragOver-Ereignis einfach der Parameter Cancel = True eingestellt.
