MouseUp non valide

cs_moimomo33 Messages postés 2 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 20 avril 2009 - 20 avril 2009 à 13:02
afnarel Messages postés 1 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 9 mai 2009 - 9 mai 2009 à 11:01
Bonjour,

Dans mon programme que je dois faire j'utilise un mouseUp mais la valeur qu'il me renvoi est la valeur prise lors du mouseDown et je ne comprend pas pourquoi :(

Je vous met donc le code incriminé ^^

Dans le InitializeComponent() j'ai mis :
            this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.selectCase);
            this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.deselectCase);

Puis mes deux fonctions sont :
        private void selectCase(object sender, MouseEventArgs e)
        {
            p.Source = (sender as Case); // p.Source est bien de type Case, et ici les valeurs sont justes :)
        }

        private void deselectCase(object sender, MouseEventArgs e)
        {
            p.But = (sender as Case); //Mais ici dans mon p.But j'ai la case sur laquelle il y a eu le mouseDown et non le mouseUp :(
        }

Merci d'avance pour votre aide précieuse :)

6 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 48
20 avril 2009 à 14:04
Salut

Je crois que puisque MouseUp indique que tu as appuyé puis relâché le bouton, c'est logique que l'objet qui génère ton événement soit celui sur lequel tu as cliqué et non celui sur lequel tu relâches.

Si tu veux voir sur quel objet tu a relâché ton clic, tu peux combiner ton MouseUp avec un MouseEnter :

Case caseSurvolee;

private void deselectCase(object sender, MouseEventArgs e)
{
    p.But = caseSurvolee;
}

private void Case_MouseEnter(object sender, EventArgs e)
{
    caseSurvolee = sender as Case;
}

Krimog : while (!(succeed = try())) ;
- Quand le règlement tu respecteras, ravis de te répondre on sera -
0
smdasilva Messages postés 2 Date d'inscription vendredi 20 mai 2005 Statut Membre Dernière intervention 22 avril 2009
21 avril 2009 à 23:32
Salut !

ça ne marche pas ce que tu proposes, je viens d'essayer.
En faite, quand le mouse down est enclanché, le MouseEnter ne fonctionne pas, et quand je relache, je crois que le MouseUp s'execute d'abord ou dans le genre, enfin je sais pas mais ça ne prend pas la valeur d'arrive, p.But reste identique à p.Source :(

Si quelqu'un trouve une autre solution :)

Pour info voici ce que j'avais en code :


private
Case CaseSurvolee;




private





void

Case_MouseDown(


object

sender,


MouseEventArgs

e)



{





p.Source = (sender as
Case);











}




private





void

Case_MouseUp(


object

sender,


MouseEventArgs

e)



{


p.But = CaseSurvolee;




MessageBox

.Show(


"Coordonnées But : "

+p.But.I +p.But.J);           // Ici se situe le problème, on me retourne les coordonnée de source^^ ( le mouseDown :(   ) 



}

private
void Case_MouseEnter(
object sender,
EventArgs e)


{





CaseSurvolee = sender as
Case;






}
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 48
22 avril 2009 à 10:45
Désolé, effectivement mon code ne marche pas.

L'autre solution que je peux te proposer est de regarder e.X et e.Y de ton MouseEventArgs e et de trouver ainsi les coordonnées absolues de ta souris (attention que e.X et e.Y sont les coordonnées de ta souris relative au coin supérieur gauche du bouton sur lequel tu as fait le clic).

Il y a probablement une méthode plus efficace, mais là, tout de suite, je ne vois pas.

Krimog : while (!(succeed = try())) ;
- Quand le règlement tu respecteras, ravis de te répondre on sera -
0
smdasilva Messages postés 2 Date d'inscription vendredi 20 mai 2005 Statut Membre Dernière intervention 22 avril 2009
22 avril 2009 à 13:00
Merci pour ta solution, c'est interessant :)

Alors le seul problème, c'est que je sais pas c'est applicable dans ce cas là.
En faite il s'agt d'un jeu avec un plateau de type dame.
Et je veux pouvoir déplacer le pion, donc je clique, et je relache sur une case.
Ce qu'il faudrait c'est récuperer la case d'arrivé de façon à échanger les pieces ( p.But.Piece = p.Source.Piece avec p le plateau et But une case et pièce ce qui definit la piece sur une case, piece pouvant être null si pas de pièce).
Voilà, donc avec ta méthode je recupère les coordonnées de la souris, sauf que je peux pas m'en servir pour avoir une case, car le plateau est une matrice de case, et on peut selectionner une case avec grille[x,y] (grille[0,0] pour la première case), donc en faite il me faut vraiment la case sur laquel on a relaché la souris, mais bon, je ne vois pas, doit bien exister un truc mais là je vois pas non plus xD^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 48
22 avril 2009 à 13:47
Ah. Alors je te conseille d'utiliser une picturebox globale pour dessiner ton plateau et de faire des événements sur cette picturebox. Ce sera probablement plus simple.

Krimog : while (!(succeed = try())) ;
- Quand le règlement tu respecteras, ravis de te répondre on sera -
0
afnarel Messages postés 1 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 9 mai 2009
9 mai 2009 à 11:01
Ça c'était un travail pour l'IUT d'Informatique de l'IUT de Bordeaux1 ^^
Et la solution donnée par Krimog fonctionne parfaitement (c'est celle que j'ai utilisée) puisque tu peux récupérer les dimensions de chaque case et du plateau et donc en déduire par une formule mathématique relativement simple dans quelle case est le curseur de ta souris.
Tester pour chaque case si l'abscisse du curseur est entre la gauche et la droite de la case ET si l'ordonnée du curseur est entre le haut et le bas.

Par contre il y a apparemment une autre solution plus jolie avec un "capture" mais le csharp ne me passionne pas vraiment donc je ne me suis pas plus renseigné. Si quelqu'un qui l'a utilisé peut expliquer comment il a fait je pense que ça aidera pas mal de gens vu que c'est une chose que l'on a sûrement souvent besoin de faire en programmation évènementielle...
0