Enfermer la souris dans une fenêtre [Résolu]

bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 29 déc. 2004 à 16:15 - Dernière réponse : cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention
- 29 déc. 2004 à 18:54
Est-il possible de bloquer la souris dans une certaine zone en C#?

Je voudrais "enfermer" la souris pour qu'elle ne dépasse pas la fenêtre pendant que le click gauche est enfoncé..

Comment faire pour "l'enfermer" ?
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 29 déc. 2004 à 16:53
3
Merci
peut etre un peu barbarre comme solution mais pas mieux pour l'instant :
l'idée est de repositionner le curseur au dernier point "correct" connu des que le curseur quitte le Form :

MouseEventHandler m_mouseMoveEventHandler;
EventHandler m_mouseLeaveEventHandler;
Point m_lastPoint;

private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
// abonnement à l'event MouseMove
this.MouseMove  += m_mouseMoveEventHandler;
// enregistrement du premier point
m_lastPoint = new Point(e.X, e.Y);
}

private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// plus besoin de l'event MouseMove
this.MouseMove  -= m_mouseMoveEventHandler;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
// on vérifie si le point est dans la zone cliente du Form
if ( !this.ClientRectangle.Contains(e.X, e.Y) )
Cursor.Position = this.PointToScreen(m_lastPoint);	// non : retour au dernier point correct connu
else
m_lastPoint = new Point(e.X, e.Y);  // oui : enregistrement du point
}


et dans le constructeur du Form :
m_mouseMoveEventHandler = new MouseEventHandler(Form1_MouseMove);


Cocoricoooooooo !!!!
coq
MVP Visual C#

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_coq
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 29 déc. 2004 à 16:55
0
Merci
hum, oublie le "EventHandler m_mouseLeaveEventHandler", il ne sert à rien là

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 29 déc. 2004 à 18:48
0
Merci
Merci ca marche !!

Très bonne idée pour la solution du code !
Commenter la réponse de bip98
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 29 déc. 2004 à 18:54
0
Merci
Je ne sais pas si c'est ce que tu recherches, mais cet event permet de stopper un drag (touche droite) si la souris sors d'une certaine surface (en loccurance, une form) ...
Je te copie juste une méthode que j'avais faite au sein d'un programme :


/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/// <summary>
/// Cancel the drag if the mouse moves off the form.
/// </summary>
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
private void dataGridFAPList_QueryContinueDrag(object sender, System.Windows.Forms.QueryContinueDragEventArgs e)
{
DataGrid dg = sender as DataGrid;
if(dg != null) 
{
Form f = dg.FindForm();
int x = Control.MousePosition.X - _screenOffset.X;
int y = Control.MousePosition.Y - _screenOffset.Y;

/* Cancel the drag if the mouse moves off the form. The screenOffset takes into account any 
 * desktop bands that may be at the top or left side of the screen. */
if((x < f.DesktopBounds.Left) || (x > f.DesktopBounds.Right) || (y < f.DesktopBounds.Top) || (y > f.DesktopBounds.Bottom)) 
e.Action = DragAction.Cancel;
}
}

Commenter la réponse de cs_Bidou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.