2009-02-04 11 views
0

Je fais un contrôle personnalisé avec un panneau. Je veux être capable de le faire glisser et de le déposer, donc j'ai implémenté cela dans l'événement MouseDown de mon contrôle. Mais je veux que la chose réagisse quand vous commencez à glisser pour donner un peu de feedback à l'utilisateur. Donc dans le MouseDown même je change de couleur. Ensuite, je veux le changer dans l'événement MouseUp. Mon contrôle n'est pas installé dans VS2008 mais juste une classe que j'ai écrite que j'instancie à l'exécution (je ne sais pas à l'avance combien j'ai besoin et ainsi de suite). Maintenant, mon contrôle expose un événement MouseDown afin de pouvoir être déplacé. Lorsque je m'abonne à cet événement de l'application parente pour effectuer le glisser-déposer, mon contrôle n'est pas repeint sur son événement MouseUp! En fait, le MouseUp n'est jamais invoqué. Si, par contre, je ne suis pas abonné à l'événement dans l'application parente, cela fonctionne comme prévu.L'événement MouseUp a-t-il été interrompu?

Que se passe-t-il? Le parent interrompt-il le flux de sorte que l'événement MouseUp ne se déclenche jamais sous mon contrôle? Comment puis-je contourner cela?

+0

pouvez-vous poster le code pertinent? – hmcclungiii

+0

Je pourrais peut-être mais je pense que c'est un peu compliqué. Je vais d'abord attendre un peu plus les réponses et voir si je peux isoler le code. –

Répondre

0

Capturez-vous la souris dans le contrôle personnalisé de l'événement mousedown? Essayez de capturer sur le mousedown et de libérer la capture sur le mouseup.

+0

Que voulez-vous dire par capture? –

2

Je ne suis pas sûr si vous utilisez Windows Forms ou WPF, mais sous des formes de Windows voici ce que je veux dire:

 
public class DerivedPanel : Panel 
{ 
    protected override void OnMouseDown(MouseEventArgs e) 
    { 
     base.OnMouseDown(e); 
     Capture = true; 
    } 

    protected override void OnMouseUp(MouseEventArgs e) 
    { 
     base.OnMouseUp(e); 
     Capture = false; 
     // Change your color or whatever here 
    } 
} 

En WPF, il existe deux méthodes, CaptureMouse() et ReleaseMouseCapture() à faire la même chose. Lorsque le contrôle capture la souris, il recevra des événements de souris même si le curseur n'est pas sur le contrôle. Cela pourrait causer votre problème. Voir MSDN Article

+0

C'est un formulaire Windows normal. Merci pour votre réponse -J'essaierai pendant le week-end et si je ne réussis pas, je posterai un code de ce que je fais. –

Questions connexes