c# - vela - Tiempo de diseño arrastrar y soltar
la vela puerca festejar para sobrevivir descargar mp3 (1)
¿Hay alguien que tenga algún puntero / enlace / buenos consejos?
Su problema parece ser abordado por el problema de Microsoft Connect. Eventos del mouse consumidos / no generados en diseñadores 2.0 . Sin embargo, este problema es fácil de entender, pero aparentemente la actualización de .NET Framework 1.1 (2003) a 2.0 (2006) implicó un cambio en el comportamiento de arrastrar y soltar, dado que el artículo que mencionas proviene del 2003, esto podría estar relacionado . Específicamente, debe avanzar a la sección Número 2 , cita:
Ahora notará un parpadeo constante al arrastrar el formulario. Esto es parcialmente causado por el nuevo comportamiento de arrastrar y soltar en 2.0.
No puedo profundizar más en esto ahora mismo, pero también podría figurar algo de Personalizar arrastrar y soltar en el Diseñador , que aborda el comportamiento modificado en cuanto a arrastrar y soltar entre Visual Studio versiones 2003 y 2005; Es muy probable que esto esté relacionado y una de las respuestas aceptadas hace referencia específica al problema de Microsoft Connect anterior, además de que ofrece más pistas sobre posibles soluciones.
Actualmente estoy trabajando en un proyecto en el que mi función es diseñar una superficie de diseño donde el usuario final pueda agregar / eliminar / mover controles en tiempo de ejecución.
Seguí este tutorial "Hosting Windows Forms Designers, por Tim Dawson" , y casi he implementado todas las características que necesito.
Breve historia para aquellos que no quieren leer el tutorial: Implementé IDesignerHost
, IContainer
, ISelectionService
, IToolboxService
y alguna otra interfaz, para crear mi superficie de diseño. No System.ComponentModel.Design.DesignSurface
ya en el marco, principalmente porque necesito una superficie de diseño realmente personalizada.
Pregunta:
Quiero permitir que el usuario arrastre y suelte nuevo Control
desde IToolboxService
a IDesignerHost/IContainer
. En este tutorial, haga clic en un Control
en la caja de herramientas, haga clic en la superficie de diseño para agregar el control.
Lo que he encontrado:
- Hay una característica incorporada que automágicamente arrastra y suelta de
IToolboxService
aSystem.ComponentModel.Design.DesignSurface
pero claramente no funciona si implementa IDesignerHost de nada. Cuando utiliza el método
Control.DoDragDrop(ToolboxItem)
, para iniciar unaControl.DoDragDrop(ToolboxItem)
arrastrar y soltar:-
IToolboxService.SerializeToolboxItem(ToolboxItem)
se llama para serializar el elemento -
IToolboxService.IsToolboxItem(object)
y
Se llama aIToolboxService.IsSupported(object)
para evaluar si el
se puede dejar caer ToolboxItem serializado en la superficie de diseño - Cuando suelta el control:
IToolboxService.DeserializeToolboxItem(object serializedObject)
es llamado por la superficie de diseño para deserializar el controldropped.
-
Se llama a
IToolboxService.SetCursor()
para saber si se define un cursor personalizado o si se deja el cursor estándar de Windows.
Problema:
Implementé todos los mencionados anteriormente, en "Lo que he encontrado", pero el método de arrastrar y soltar tiene errores:
- Arrastro, todo está bien, pero al pasar el cursor sobre la superficie de diseño, mi cursor parpadea un poco entre el cursor estándar y el estilo "
DragDropEffects.Copy
". - Cuando dejo caer, no pasa nada, y cuando mi cursor sale de la superficie de diseño (después de que caí), entonces el nuevo
Control
se crea y se agrega donde lo dejé caer.
¿Alguien ha intentado alguna vez hacer lo que estoy haciendo? De ser así, ¿cómo lo ha logrado? ¿Hay alguien que tenga algún puntero / enlace / buenos consejos?
Gracias =)