Me gustaría desencadenar el control de destino de arrastre para volver a dibujarse (mediante invalidar o actualizar) durante los eventos DragEnter y DragLeave. El código es algo como:Volver a dibujar durante la operación de arrastrar y soltar
protected override void OnDragEnter (DragEventArgs drgargs)
{
//-- Set a property that affects drawing of control, then redraw
this.MyProperty = true;
this.Refresh(); //-- Does nothing???
}
protected override void OnDragLeave (EventArgs e)
{
//-- Set a property that affects drawing of control, then redraw
this.MyProperty = false;
this.Refresh(); //-- Does nothing???
}
En realidad, no volver a dibujar el control, el método OnPaint no es llamado por el Refresh() dentro de estos eventos. ¿Hay alguna manera de hacer esto? No debo entender algo aquí.
ACTUALIZACIÓN: la respuesta proporcionada por jasonh en realidad no funciona. Al usar Invalidate() o Invalidate (rect) el control no se actualiza. Se trata de llamadas durante una acción de arrastrar y soltar. ¿Alguna otra idea? ¿Puede desencadenar un redibujado de un control durante arrastrando y soltando? ¡Gracias!
ACTUALIZACIÓN 2: que creó un proyecto de ejemplo y no podía conseguir que esto no trabajo. Suspiro ... Finalmente lo rastreé hasta encontrar algún código en el OnPaint que causaba el problema. Entonces, esto resultó ser que más de mí no entendía cómo funcionaba el depurador (nunca llegó a los puntos de interrupción en OnPaint ... aún no sé por qué). Invalidate(), Refresh() ambos funcionan. JasonH obtiene la respuesta, ya que en última instancia era correcta y también mostró cómo invalidar solo una parte de un control ... No sabía de eso.
¡Gracias por toda su ayuda!
Supongo que no has configurado AllowDrop como verdadero. – jasonh
Sí, AllowDrop está establecido en verdadero. El arrastrar y soltar está sucediendo. Solo el redibujado del control no es (OnPaint no se invoca después de Invalidate() o Refresh()). –