Je voudrais déclencher le contrôle de cible glisser pour se redessiner (via invalider ou rafraîchir) pendant les événements DragEnter et DragLeave. Le code ressemble à:Redessiner pendant le glisser-déposer
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???
}
Il ne redessine pas vraiment le contrôle, la méthode OnPaint n'est pas appelé par le Refresh() dans ces événements. Est-ce qu'il y a un moyen de faire ça? Je ne dois pas comprendre quelque chose ici.
MISE À JOUR: La réponse fournie par jasonh ne fonctionne pas. Lorsque vous utilisez Invalidate() ou Invalidate (rect), le contrôle n'est pas réellement mis à jour. Ceci appelle pendant une action glisser-déposer. D'autres idées? Pouvez-vous déclencher un redessin d'un contrôle pendant un glisser-déposer? Merci!
MISE À JOUR 2: Je créé un exemple de projet et n'a pas pu obtenir ce pas travail. Soupir ... J'ai finalement retrouvé un peu de code dans OnPaint qui causait le problème. Donc, cela s'est avéré être plus de moi ne pas comprendre comment le débogueur a fonctionné (il n'a jamais frappé les points de rupture dans l'OnPaint ... ne sais toujours pas pourquoi). Invalidate(), Refresh() fonctionnent tous les deux. JasonH obtient la réponse car elle était finalement correcte et a également montré comment invalider juste une partie d'un contrôle ... Je ne savais pas à ce sujet.
Merci pour votre aide!
Je suppose que vous n'avez pas défini AllowDrop sur true. – jasonh
Oui, AllowDrop est défini sur true. Le glisser-déposer est en cours. Juste le redessin du contrôle n'est pas (OnPaint n'est pas appelé après Invalidate() ou Refresh()). –