2010-03-02 4 views
1

Je veux limiter la mouseclick dans une région et si aucun contrôle sont là dans la région, il devrait permettre mouseclick.Pour limiter mouseclick

Comment faire

+0

Formulaires Web? Windows Forms? MVC? – jrista

+0

dans la fenêtre forme – curiosity

Répondre

0

Vous avez probablement besoin de capturer la souris, en plus de manipuler la souris vers le bas/des messages. Malheureusement, le meilleur moyen de capturer la souris est de surveiller le message WM_CAPTURECHANGED, ce qui signifie que nous devons descendre dans l'API Win32 pour surveiller cet événement, car Windows Forms ne définit pas d'événement correspondant. Par exemple, afin de gérer ce message Win32, tout d'abord vous définissez une classe interne pour gérer le message à faible niveau WM_CAPTURECHANGED, et définir le gestionnaire d'événements:

public partial class Form1 : Form 
{ 
    class CaptureChangedWindow : NativeWindow 
    { 
     public CaptureChanged OnCaptureChanged; 

     protected override void WndProc(ref Message m) 
     { 
      if (m.Msg == 533)  // WM_CAPTURECHANGED 
       OnCaptureChanged(); 
      base.WndProc(ref m); 
     } 
    } 
    public delegate void CaptureChanged(); 
    ... 
} 

Suivant déclarer un champ membre de tenir l'instance CaptureChangedWindow :

public partial class Form1 : Form 
{ 
    CaptureChangedWindow ccw; 
    ... 
} 

Suivant définir une méthode qui sera appelée lorsque délégué CaptureChanged est invoqué:

public partial class Form1 : Form 
{ 

    private void CaptureChangedEventHandler() 
    { 
     // your code 
     // e.g. now it's safe to assume that mouse is captured 
    } 
    ... 
} 

Enfin, modifiez le constructeur pour créer et initialiser la classe imbriquée:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     ccw = new CaptureChangedWindow(); 
     ccw.AssignHandle(Handle); 
     ccw.OnCaptureChanged += 
        new CaptureChanged(CaptureChangedEventHandler); 
    } 
    ... 
} 

C'est tout ce dont vous avez besoin. Vous pouvez ensuite traiter avec d'autres événements de souris comme d'habitude.

+0

Hey merci de me dire le concept .. c'est WHT je cherchais .. – curiosity

1

Dans votre formulaire, substituez la méthode WndProc, manipuler la souris un message à gauche et si elle est dans la région acceptée, appelez la classe de base, sinon avaler le message (c.-à ne pas appeler le classe de base)

1

Vous ne tout simplement pas la réponse à l'événement pour la région mouseclick et mettre en œuvre le cas de ses contrôles enfants.

Ou je ne vous ai pas.

Questions connexes