Hallo Community,
folgende Problemstellung:
Ich habe ein WinForm, darin ein TableLayoutPanel, 1 Zeile, 2 Spalten. In der linken Spalte sitzt eine Listbox mit string-items. In der rechten Spalte wird zur Laufzeit, aus einer dll, ein UserControl geladen. Das UserControl enthält Textboxen und andere Controls. Ziel ist die Strings aus der Listbox zu draggen und in die Textboxen ( die auf dem UserControl sitzen) zu droppen - wie ihr euch denken könnt scheitere ich genau daran, das DragDrop Event der Textboxen und des UserControls löst nicht aus.
Versucht habe ich unter anderem:
Es wundert mich, dass die DragEnter und DragLeave Events der Textboxen wie erwartet funktionieren, während das DragDrop Event spinnt. Meine Vermutung ist, dass das die Fehlfunktion von DragDrop irgendwie mit dem Verhalten des MouseUp Events, wie in 4. beschrieben, zusammenhängt.
Ich bitte um Rat.
Hat niemand eine Idee?
Habe ich das Problem unklar beschrieben, oder ist es eher eines dieser Randgruppenprobleme? 😛
Könntest du ein Beispielprojekt hier hochladen (bzgl. deinem 3. Punkt)?
Hallo Th69, ich hoffe das funktioniert jetzt wie beabsichtigt.
In der propjekte.zip findest du je eine zip mit dem Dll-Projekt für das UserControl und dem Form-Projekt wo dieses UserControl eingebunden ist. Wie in Punkt 3 meines Eröffnungsposts beschrieben, habe ich im Dll-Projekt die Events "DragDrop" und (zu Vorführzwecken) "DoubleClick" der Textboxen behandelt und in den Handlermethoden je ein eigens definiertes Event des UserControls ausgelöst. Die Events des UserControls werden dann im Form behandelt. Die Crux ist nach wie vor, dass das DragDrop Event nicht geht (das DoubleClick Event funktioniert wie gewünscht).
Das ging ja einfach zu reparieren. 😉
Einfach noch das DragOver
-Ereignis behandeln:
this.textBox1.DragOver += new DragEventHandler(this.handleTextBoxDragOver);
this.textBox2.DragOver += new DragEventHandler(this.handleTextBoxDragOver);
private void handleTextBoxDragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All; // was du willst (außer DragDropEffects.None)
}
Warum das hier allerdings explizit notwendig ist, da kann ich auch nur vermuten, daß dies aufgrund der dynamisch geladenen Assembly so ist (als weiterer Sicherheitsmechanismus bzw. um dich zu ärgern 😉.