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 :

Blocage sur MouseMove


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 13
    Par défaut Blocage sur MouseMove
    Bonjour,
    Je débute à peine le C# et voilà que je sèche depuis ce matin sur un problème.
    Je dessine des rectangles et j'aimerais les déplacer(avec ma souris) par la fonction appliquée à mes objets.
    Voici une partie de mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private Noeud noeudCourant = null;
     //Collection de noeuds
            List<Noeud> noeuds = new List<Noeud>();
            bool enDeplacement;
     
     private void DessinV2_MouseMove(object sender, MouseEventArgs e)
            {
                if (enDeplacement)
                {
                    noeudCourant.Move(e.Location);
                    Refresh();
                }
            }
    Je sèche carrément sur la manière d'instancier ma méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void Move(Point point)
                {
                    //si en déplacement 
                    if (enDeplacement)
                    {
                         //Bouge stp
     
                    }
                }
    Merci de votre aide pédagogique

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par TiteFleur014 Voir le message
    sur la manière d'instancier ma méthode

    ca ne veut pas dire grand chose ...

    sinon dans le principe, sur mousedown on flag un booléen, sur mousemove on teste s'il y a ce booléen, et sur mouseup on déflag le booléen
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 13
    Par défaut Code en entier
    Très clairement je ne sais pas comment contrôler le mouvement dans la méthode Move.
    Voici mes différents code pour être un peu plus claire
    Ma classe dessin
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace DessinObjets
    {
        public partial class DessinV2 : Form
        {
            #region attributs
            private Color couleurParDefaut = Color.BlueViolet;
            private int epaisseurParDefaut = 1;
            private Noeud noeudCourant = null;
     
            //Collection de noeuds
            List<Noeud> noeuds = new List<Noeud>();
     
            bool enDeplacement;
            #endregion attributs
     
            public DessinV2()
            {
                InitializeComponent();
            }
            //Traitement de l'évènement MouseDown
            private void Dessin_MouseDown(object sender, MouseEventArgs e)
            {
                noeudCourant = TrouveNoeud(e.Location);
                if (deplacement.Checked)
                {
                    #region deplacement
                        foreach(Noeud re in noeuds)
                        {
                            if (re.Contains(e.Location))
                            {
                                noeudCourant = re;
                                break;
                            }
                        }
                        if(noeudCourant != null)
                        {
     
                        }
                    #endregion deplacement
                }
                else
                {
                    //Dessin
                    Noeud nouvNoeud = new Noeud(e.Location, new Size(10, 10), couleurParDefaut, epaisseurParDefaut);
                    noeuds.Add(nouvNoeud);
                    Refresh();
                }
            }
     
            private void Dessin_Paint(object sender, PaintEventArgs e)
            {
                foreach (Noeud n in noeuds)
                    n.Dessine(e.Graphics);
            }
     
            //Pour sélectionner le rectangle
            private Noeud TrouveNoeud(Point p)
            {
                foreach (Noeud re in noeuds)
                {
                    if (re.Contains(p))
                    {
                        return re;
                    }
                }
                return null;
            }
     
            private void DessinV2_MouseMove(object sender, MouseEventArgs e)
            {
                if (enDeplacement)
                {
                    noeudCourant.Move(e.Location);
                    Refresh();
                }
            }
     
            private void DessinV2_MouseUp(object sender, MouseEventArgs e)
            {
                enDeplacement = false;
                noeudCourant = null;
            }
     
     
     
        }
    }
    et ma classe nœud qui me pose problème avec la méthode Move.
    Sachant qu'après je suis censée relier mes petits rectangles en eux avec des traits une sorte de Win'Design de débutant

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace DessinObjets
    {
        class Noeud
        {
            #region attributs
                private Color couleur;
                private int epaisseur;
                private Rectangle rect;
                bool enDeplacement;
                Noeud noeudCourant;
            #endregion attributs
     
            #region constructeurs
                public Noeud(Rectangle r, Color c, int e)
                {
                    rect = r;
                    couleur = c;
                    epaisseur = e;
                }
     
                public Noeud(Point p, Size s, Color c, int e)
                {
                    rect = new Rectangle(p, s);
                    couleur = c;
                    epaisseur = e;
                }
            #endregion constructeurs
     
            #region methode
                //Méthode pour dessiner un noeud ds la zone en paramètre
                public void Dessine(Graphics g)
                {
                    Pen p = new Pen(couleur, epaisseur);
                    g.DrawRectangle(p, rect);
                }
            #endregion methode
     
     
     
                public bool Contains(Point p)
                {
                    return rect.Contains(p);
                }
     
                public void Move(Point point)
                {
                    //si en déplacement 
                    if (enDeplacement)
                    {
                         //Bouge stp
                    }
                }
        }
    }
    Merci de me donner votre avis et de me débloquer au passage!

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Tres claurement ,petit fleur,tu n'as jamais fait l'effort simple de commencer à dessiner un simple rectangle sur un form...et le deplacer...


    D'abord fais un effort dans la maniere de taper (rediger) ton code :noms des variables,objets (ne mets pas des accents,manie francaise)...appropries et sans ambiguite....
    Class Noeud:
    - les valeurs par defaut doivent etre dans ce class non dans le form..Crayon et ses prop...Si quelque utilise ce sera simple il cree un nouveau noeud et voit de tout suite ce que ton appli fait...
    Le dessin dans le pictureBox (j'ai revu ton form ou il doit y avoir un checkbox et un picturebox) se fait en 3 temps toujours (sauf les gauchers probablement comme toi !!!)
    - MouseLeft & Click . Si Mode Deplacement Active et si Point Clique est dans un Rect =>selection du Rect qui devient le Rect Courant ...Refresh()
    sinon Addition d'un Rect qui devient le Rect Courant ...
    - MouseLeft & Click. Si Mode Deplacement Active ET il "existe" un Rect Courant le deplacer....Refresh()

    - MouseRight & Click. Si Mode Deplacement Active ET il "existe" un Rect Courant le position definivement ..Mettre Rect Courant à null pour repartir sur un nouveau cycle....

    Enfin dans la fameuse methode Move tu assignes la position (point) comme coordonne du Rect du Noeud...


    Probablement tu auras besoin d'un mode Adding,Erasing en plus du mode Mode Deplacement ...,d'un FillBrush normal et de Selection dans ton class Noeud et de proprietes....
    code .cs

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Drawing;
     
    namespace DessineObjets
    {
        public class Noeud
        {
            #region Private Members
            private Pen crayon=null;
            private Color penCouleur = Color.Black;
            private float epaisseur= 1.0f;
            private Color remplissageCouleur=Color.Blue;
            private Brush brosse=null; 
            private Rectangle rect = Rectangle.Empty;
            #endregion Private Members
     
            #region Constructeurs
            public Noeud()
            {
                //rect par default 
                rect = new Rectangle(0, 0, 25, 25);
                crayon = new Pen(penCouleur,epaisseur);
                brosse = new SolidBrush(remplissageCouleur);
     
            }
            public Noeud(Rectangle r, Color clrCrayon, float e):this()
            {
                rect = r;
                penCouleur = clrCrayon;
                epaisseur = e;
            }
     
            public Noeud(Point p, Size s, Color clrCrayon, float e)
            {
                rect = new Rectangle(p, s);
                penCouleur = clrCrayon;
                epaisseur = e;
            }
            #endregion Constructeurs
     
            #region Public Methods
            //Méthode pour dessiner un noeud ds la zone en paramètre
            public void Dessine(Graphics gr)
            {
                Pen p = new Pen(penCouleur , epaisseur);
                gr.DrawRectangle(p, rect);
            }
     
     
     
            public bool Contains(Point p)
            {
                return rect.Contains(p);
            }
            public bool Collision(Noeud autreNoeud)
            {
                if (autreNoeud == this) return false;
                return rect.IntersectsWith(autreNoeud.rect);
            }
     
            public void Move(Point pointDest)
            {
                //deplace toi 
     
                rect.X = pointDest.X;
                rect.Y = pointDest.Y;
     
     
            }
            #endregion Public Methods
        }
     
    }

    code .cs du form d'utilisation:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace DessineObjets
    {
        public partial class Form1 : Form
        { 
            #region Private Members 
                private Color couleurParDefaut = Color.BlueViolet;
                private int epaisseurParDefaut = 1;
                private Noeud noeudCourant = null;
     
                //Collection de noeuds
                List<Noeud> noeuds = new List<Noeud>();
     
                bool modeDeplacement;
            #endregion Private Members
     
            public Form1()
            {
                InitializeComponent();
            }
            private Point   ptClique = Point.Empty ;  
            private void picDessin_MouseDown(object sender, MouseEventArgs e)
            {
                ptClique = e.Location;
                if (e.Button == MouseButtons.Left)
                {
                    #region deplacement
                    if (modeDeplacement)
                    {
                        foreach (Noeud re in noeuds)
                        {
                            if (re.Contains(ptClique))
                            {
                                noeudCourant = re;
                                break;
                            }
                        }
                    }
                    #endregion deplacement
                    #region addition
                    else
                    {
                        //Dessin
                        noeudCourant = new Noeud(e.Location, new Size(10, 10), couleurParDefaut, epaisseurParDefaut);
                        noeuds.Add(noeudCourant);
     
                        //refresh pour le "feedback" user... 
                        this.picDessin.Refresh();
                    }
                    #endregion addition
     
     
                }
            }
     
            private void picDessin_MouseMove(object sender, MouseEventArgs e)
            {
                Point pt = e.Location;
                if (e.Button == MouseButtons.Left )
                {
                    if (modeDeplacement && noeudCourant != null)
                    {
                        noeudCourant.Move(pt);
     
                        //refresh pour le "feedback" user... 
                        this.picDessin.Refresh();
                    }
                }
            }
     
            private void picDessin_MouseUp(object sender, MouseEventArgs e)
            {
                Point pt = e.Location;
                if (e.Button == MouseButtons.Right )
                {
                    if (modeDeplacement && noeudCourant != null)
                    {
                        noeudCourant.Move(pt);
     
                        //refresh pour le "feedback" user... 
                        this.picDessin.Refresh();
                        noeudCourant = null;
     
                    }
                    else
                    {
                        noeudCourant = null;
     
                    }
                }
     
            }
     
            private void picDessin_Paint(object sender, PaintEventArgs e)
            {
                foreach (Noeud n in noeuds)
                    n.Dessine(e.Graphics);
            }
     
            private void chkDeplacement_CheckedChanged(object sender, EventArgs e)
            {
                modeDeplacement = chkDeplacement.Checked;
            }
     
     
        }
    }
    bon code....

Discussions similaires

  1. [68HC11] Blocage sur une boucle
    Par paterson dans le forum Autres architectures
    Réponses: 3
    Dernier message: 10/11/2006, 21h45
  2. blocage sur une méthode synchronized
    Par rockelite dans le forum Général Java
    Réponses: 3
    Dernier message: 03/05/2006, 23h28
  3. Blocage sur récursivité de base
    Par gilles641 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 07/04/2006, 14h42
  4. blocage sur Left
    Par TSS dans le forum Access
    Réponses: 5
    Dernier message: 10/03/2006, 13h33
  5. [10g1][OCI][C++][IIS] Blocage sur un update
    Par Herode dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 21/02/2006, 10h32

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