IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Comment acceder aux coordonnées de la souris ?


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut [C#] Comment acceder aux coordonnées de la souris ?
    Bonjour !

    J'ai un petit problème dans mon projet : je dois dessiner un cercle (GDI+ : ellipse) dans la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private void boardPictureBox_paint(object sender, PaintEventArgs e)
    {
       Graphics g = e.Graphics;
     
       // dessin de l'ellipse
       ...
       g.fillEllipse( linearBrush, coordX, coordY, ... );
    }
    mais je dois dessiner celle ci à des coordonnées précises, selon l'endroit du clic de la souris dans cette pictureBox. Je dispose d'une gestion d'evenement pour ce clic, me donnant les coordonnées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void mouseClickEvent(object sender, MouseEventArgs e)
    {
       // coordonnées du clic
       int x = e.X;
       int y = e.Y;
    }
    Le problème est le suivant : je ne peux dessiner que dans ma pictureBox vu que j'ai besoin de l'objet Graphics g = e.Graphics;

    Mais j'ai besoin des coordonnées du clic de souris (qui ne sont connus que dans la méthode "mouseClickEvent" pour dessiner cette ellipse...

    Comment faire pour associer les 2 (l'objet graphics "g" et mes coordonnées X et Y) ??

    Merci d'avance !

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    En ne stockant pas locament tes variables de position X et Y

    Je suppose que tes 2 méthodes sont dans la même classe qui est en fait ta fenêtre. Crée alors 2 variables privées pour stocker les coordonnées, posX et posY par exemple, que tu affecteras lors de l'événement du clic souris et que tu utiliseras pour le tracé de ton ellipse
    Pas de questions techniques par MP

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    private int coordX;
    private int coordY;
     
    private void boardPictureBox_paint(object sender, PaintEventArgs e) 
    { 
       Graphics g = e.Graphics; 
     
       // dessin de l'ellipse 
       ... 
       g.fillEllipse( linearBrush, coordX, coordY, ... ); 
    } 
     
    private void mouseClickEvent(object sender, MouseEventArgs e) 
    { 
       // coordonnées du clic 
       coordX = e.X; 
       coordY = e.Y; 
    }
    Il est où le pb :

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Maintenant il est vrai que nous ne connaissons pas l'ordre effectif des actions utilisateur et comment celui-ci agit par design sur le dessin avec precision
    Il est tout a fait possible de n'avoir qu'une seule methode PaintEllipse qui reçoit en paramètres les X et Y et qui ne s'execute que lorsqu'il s'agit bien d'une action utilisateur dans ce sens
    Dans ce cas, tu as besoin de savoir comment récupérer le Graphics d'un controle quelconque en dehors du Paint
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Graphics g = Graphics.FromHwnd(MyControl.Handle);
    il est parfois necessaire d'actualiser par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyControl.Invalidate();
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Ok ça se passe plutot bien comme ça

    Maintenant j'ai un ptit problème d'implémentation :

    j'aimerais que, à chaque clic, il dessine un cercle à ces coordonnées (le dessin se fait via un objet tc que j'ai créé. Ex: tc.addCircle(x,y) et cet objet tc n'est connu que dans la méthode "boardPictureBox_paint". (je ne peux le créer que là car j'ai besoin de e.graphics propre à cette méthode pour créer mon objet tc).

    Comment puis-je faire pour que dans ma méthode "mouseClickEvent" (également une méthode de ma form), je puisse utiliser également cette objet tc ?

    Merci d'avance !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Morpheus, cette technique n'ira pas, étant donné que je dois dessiner un nouveau cercle à chaque clic de souris, or ici il ne le dessinera qu'une seule fois, je dois placer mon traitement dans mon évenement clic souris.

    Neguib, ta réponse m'intéresse, mais je n'ai pas tout très bien compris... en effet, ça me simplifierait vraiment la vie si je pouvais récupérer l'objet graphics de ma méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    boardPictureBox_paint(object sender, PaintEventArgs e)
    {
       Graphics g = e.Graphics;
    }
    afin que je puisse l'utiliser dans ma méthode "mouseClickEvent" pour dessiner mon cercle à chaque nouveau clic...

    Comment faire ?

    Merci d'avance !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Ok c'est bon j'ai cherché et j'ai trouvé

    C'était en fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hwnd = boardPictureBox.Handle;
    En tout cas merci beaucoup, ça m'a bien aidé à avancer

    A plus !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/03/2008, 05h34
  2. Réponses: 14
    Dernier message: 05/05/2006, 09h39
  3. [VB.Net] Comment accéder aux fonctions du C++ ?
    Par devmat dans le forum Services Web
    Réponses: 2
    Dernier message: 17/03/2006, 20h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo