cs_moimomo33
Messages postés2Date d'inscriptiondimanche 6 mai 2007StatutMembreDernière intervention20 avril 2009
-
20 avril 2009 à 13:02
afnarel
Messages postés1Date d'inscriptionmercredi 21 janvier 2009StatutMembreDerniè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 :(
}
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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 :
smdasilva
Messages postés2Date d'inscriptionvendredi 20 mai 2005StatutMembreDernière intervention22 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 :( )
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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 -
smdasilva
Messages postés2Date d'inscriptionvendredi 20 mai 2005StatutMembreDernière intervention22 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^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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 -
afnarel
Messages postés1Date d'inscriptionmercredi 21 janvier 2009StatutMembreDerniè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...