none
petite probléme c# svp, besoin de votre aide! RRS feed

  • Question

  • Bonsoir à tous,
    je veut créer une interface c# qui contient une bouton noeud qu'on je clique une fois sur celle ci et je clique sur un endroit de la fenetre que j'ai créé il se trace une cercle, le dessin de cette dernière  ne se fait autre fois que si je refait une simple clique sur le bouton et faire autre clique sur autre endroit c'est le code que j'ai arrivé  à l'écrire mais, j'ai constaté que j'ai une problème au niveau de boutton car  le dessin de cercle ce fait meme si je clique seulement sur un endroit de la fenetre.
     je sais pas comment corriger  mon code, je besoin de votre aide s'il vous plait car je suis débutante en c#.
    Merci d'avance.

    Voila le code que j'ai fait:

    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 Project
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
              private void NoeudButton_Click(object sender, EventArgs e)
              {
                NoeudButton.FlatStyle = FlatStyle.Flat;
               
            }

            private void Form1_MouseClick(object sender, MouseEventArgs e)
            {
                drawCircle(e.X, e.Y);
               
            }

           private void drawCircle(int x,int y)
           {
               Graphics g;
               g= CreateGraphics();
               Rectangle myRectangle = new Rectangle(x, y, 40, 40);
               Pen myPen= new Pen(Color.Blue,4);
               SolidBrush sb1 = new SolidBrush(Color.Black); // On crée un brush.
               g.FillEllipse(sb1, new Rectangle(new Point(x, 1y), new Size(40,40));
               g.DrawEllipse(myPen,myRectangle);
               g.Dispose();
           }  

        }
    }
    mardi 16 mars 2010 16:50

Réponses

  • salut, je ne suis pas un expert mais

    a première vu c normal puisque vous avez créer un seul évenement Form1_Mouseclick  qui  donne l'ordre de dessiner un cercle  et qui est rataché a votre formulaire  Form1_Mouseclick donc si vous cliquez sur le bouton  il ne dessine pas le cercle

    vous devez faire ca

    private void drawCircle(int x,int y)
           {
               Graphics g;
               g= CreateGraphics();
               Rectangle myRectangle = new Rectangle(x, y, 40, 40);
               Pen myPen= new Pen(Color.Blue,4);
               SolidBrush sb1 = new SolidBrush(Color.Black); // On crée un brush.
               g.FillEllipse(sb1, new Rectangle(new Point(x, y), new Size(40,40)));
               g.DrawEllipse(myPen,myRectangle);
               g.Dispose();
           }
    
            private void button1_Click(object sender, EventArgs e)
            {
                this.MouseClick += new MouseEventHandler(Form1_MouseClick);
               
            }
    
            void Form1_MouseClick(object sender, MouseEventArgs e)
            {
                this.MouseClick -= new MouseEventHandler(Form1_MouseClick);
                drawCircle(e.X, e.Y);
                //throw new NotImplementedException();
            }
    • Proposé comme réponse Dragonix mardi 16 mars 2010 18:23
    • Modifié Dragonix mardi 16 mars 2010 19:07
    • Marqué comme réponse Audrey PETIT mercredi 17 mars 2010 16:15
    mardi 16 mars 2010 18:16
  • si vous suivez le derniers post   le code va s' ajouté tout seul au moment au vous écrirez

    this.MouseClick +=        et la il vous propose d' écrire pour vous la futur void   en appuyant sur TAB 2 fois

    essayez

    ce code est un écouteur  sur l' évenement this.MouseClick  qui correspond  a un l' évenement clic dans le formulaire


    voila et je le répète visual studio C# comme basic vous offre la possibilité de faire pratiquement tout par l' IDE pour vous faciliter le travail  en cliquant sur des icon comme le panneau de propriété mais  en fait vous pouvez tout faire par programmation donc écrire du code dans le Form1.cs évenement écouteur etc.....

    voila par exemple le code qui permet d' écrire entièrement les évenemets les écouteur  sans passer par les doubleclick sur les bouton form1 etc...

    déposez un bouton dans le form et ajoutez le code suivant

    namespace
     
    Essaicercle 
    {
     
    public partial class Form1 : Form
    {
     
    public Form1() 
    {
    InitializeComponent();
    //même ligne de code que celle qui se trouverait dans le fichier disigner.cs si vous aviez double cliquez sur le bouton
    button1 .Click +=
    new EventHandler(button1_Click); 
    }
     
    private void drawCircle(int x, int y) 
    {
     
    Graphics g; 
    g = CreateGraphics();
     
    Rectangle myRectangle = new Rectangle(x, y, 40, 40); 
     
    Pen myPen = new Pen(Color.Blue, 4); 
     
    SolidBrush sb1 = new SolidBrush(Color.Black); // On cre un brush.
    g.FillEllipse(sb1,
    new Rectangle(new Point(x, y), new Size(40, 40))); 
    g.DrawEllipse(myPen, myRectangle);
    g.Dispose();
    }
     
    private void button1_Click(object sender, EventArgs e) 
    {
     
    //même ligne de code que celle qui se trouverait dans le fichier disigner.cs si vous aviez double cliquez sur le Form1
    this.MouseClick += new MouseEventHandler(Form1_MouseClick); 
    }
     
    void Form1_MouseClick(object sender, MouseEventArgs e) 
    {
     
    this.MouseClick -= new MouseEventHandler(Form1_MouseClick); 
    drawCircle(e.X, e.Y);
     
    //throw new NotImplementedException();
    }
     
    }
    }

     

     


    LENILAM

     

    • Marqué comme réponse Audrey PETIT mercredi 17 mars 2010 16:15
    mercredi 17 mars 2010 13:08

Toutes les réponses

  • Bonjour,

    En compilant votre projet, j'ai deux erreurs
    après correction voici le code:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    //using System.Drawing.Drawing2D;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace dessine_cercle
    {
     public partial class Form1 : Form
     {
      //Boolean ButtonPushed = false;

      public Form1()
      {
       InitializeComponent();
      }

      private void Noeudbutton_Click(object sender, EventArgs e)
      {
       Noeudbutton.FlatStyle = FlatStyle.Flat;
       //ButtonPushed = true;

      }
      private void Form1_MouseClick(object sender, MouseEventArgs e)
      {
       drawCircle(e.X, e.Y);

      }

      private void drawCircle(int x, int y)
           {
               Graphics g;
               g= CreateGraphics();
               Rectangle myRectangle = new Rectangle(x, y, 40, 40);
               Pen myPen = new Pen(Color.Blue,4);
               SolidBrush sb1 = new SolidBrush(Color.Black); // On crée un brush.
               g.FillEllipse(sb1, new Rectangle(new Point(x, y), new Size(40,40)));
               g.DrawEllipse(myPen,myRectangle);
               g.Dispose();
           }  
     }
    }

    fred
    mardi 16 mars 2010 17:48
  • salut, je ne suis pas un expert mais

    a première vu c normal puisque vous avez créer un seul évenement Form1_Mouseclick  qui  donne l'ordre de dessiner un cercle  et qui est rataché a votre formulaire  Form1_Mouseclick donc si vous cliquez sur le bouton  il ne dessine pas le cercle

    vous devez faire ca

    private void drawCircle(int x,int y)
           {
               Graphics g;
               g= CreateGraphics();
               Rectangle myRectangle = new Rectangle(x, y, 40, 40);
               Pen myPen= new Pen(Color.Blue,4);
               SolidBrush sb1 = new SolidBrush(Color.Black); // On crée un brush.
               g.FillEllipse(sb1, new Rectangle(new Point(x, y), new Size(40,40)));
               g.DrawEllipse(myPen,myRectangle);
               g.Dispose();
           }
    
            private void button1_Click(object sender, EventArgs e)
            {
                this.MouseClick += new MouseEventHandler(Form1_MouseClick);
               
            }
    
            void Form1_MouseClick(object sender, MouseEventArgs e)
            {
                this.MouseClick -= new MouseEventHandler(Form1_MouseClick);
                drawCircle(e.X, e.Y);
                //throw new NotImplementedException();
            }
    • Proposé comme réponse Dragonix mardi 16 mars 2010 18:23
    • Modifié Dragonix mardi 16 mars 2010 19:07
    • Marqué comme réponse Audrey PETIT mercredi 17 mars 2010 16:15
    mardi 16 mars 2010 18:16
  • Merci Fred et Dragonix pour votre essai, mais j'ai compilé les 2 codes mais j'ai trouvé encore la meme probléme je ne n'ai pas cliqué  sur la bouton je clique seulement sur la fenetre et la cercle se créer sans aucun clique sur le boutton, mois moi  j'espere que la création de cercle se fait quand je clique sur la bouton puis sur un endroit de la fenetre.  j'ai essayé beaucoup et j'arrive pas à ce que je veux.
    mardi 16 mars 2010 18:46
  • disons que la je ne t' avais pas désinscri  l' événement  regarde à nouveau et je v commenter le code :

    donc les étapes :
    1 créer évenement clic_bouton qui ajoutera une écoute sur Form1_Click

    ce code permet juste d' écouter si l' évenement Form1_MouseClick 
    private void button1_Click(object sender, EventArgs e) {// pour créer une écoute d' évenement utiliser la touche TAB après This.MouseClick this.MouseClick += new MouseEventHandler(Form1_MouseClick); }
    ce qui créer le code de l' évenement  : Form1_MouseClick

    void Form1_MouseClick(object sender, MouseEventArgs e)
            {// j' avais oublier de désinscrire l' écoute c pour ca que lors du deuxième click dans la Form le cercle était toujours dessiné
                this.MouseClick -= new MouseEventHandler(Form1_MouseClick);
                drawCircle(e.X, e.Y);
                //throw new NotImplementedException();
            }
    voila
    mardi 16 mars 2010 19:21
  • Vraiment un grand merci Dragonix, 90 % du probléme est déjà résolue sauf que dans la première fois seulement quand je clique d'abord sur la fenetre seulement la cercle se créé sans le clique sur le bouton mais si je désire dans une deuxiéme fois de créer une autre cercle ça ne se fait que si je clique sur la bouton tout d'abord puis la fenetre en deuxiéme lieu.
    Désolé si je vous dérange un peux mais je vous remerci bi1.
    mardi 16 mars 2010 19:47
  • a mon avis c parceque vous avez crée l' évenement bouton_click en double cliquant dans la fen^tre de propriété du paneau de droite lorsque vous avez fait vos essai , du coup il est toujours inscrit dans le fichier Form1.disigner.cs
    mais le code que je vous ai donné à été écrit a la main et pas par l' ide donc vous avez toujour celui qui a été crée lorsque vous avez sûrement cliqué sur le panneau de propriété du bouton pour créer un événement bouton_click
    Donc il faut  selectionner le bouton cliquez sur option évenement et la enlever l' évenement
    puisque en fait on l' a codé nous même

    il faut bien comprendre que l' ide permet d' aller plus vite en utilisant les panneaux mais  du coup on ne vois pas le code qui a été crée sauf si on va dans le fichier .cs

    voila
    • Proposé comme réponse Dragonix mardi 16 mars 2010 20:21
    mardi 16 mars 2010 20:19
  • J'ai créer l'evenement bouton_click en double cliquant sur la bouton au niveau de la fenetre, et l'événement Form1_MouseClick je l'ai crée en sélectionnat la fenetre(1seul clique) puis je clique sur l'icone Events du menu propriétés puis je choisi Mouse_click et je fait un double clique il se créer dans le fichier.cs Form1_Mouse clique puis j'écrit mon code. Je pense que ça ce que je doit faire pour créer l'événement.
    Je sais pas ou'  est le problème précisément?
    mercredi 17 mars 2010 09:33
  • bonjour, non c exactement le contraire  pour la form

    étant donné que l' on code une écoute d' événement  pour  Form1_MouseClick

      this.MouseClick += new MouseEventHandler(Form1_MouseClick);


     il ne faut pas en créer un par  le panneau d' évenement et a mon avi c la le problème il est toujours inscrit ,non?
     sinon utilisez un projet vierge déposez un bouton doublecliquez sur le bouton
    codez l' écoute en écrivant:

    this.mouse.click+= (tapez TAB 2 fois pour crer automatiquement le code )

    donc on a va dans le code  

    void Form1_MouseClick  (...   qui vient d' être ajouté automatiquement )

    on enlève l' écoute pour obliger l' utilisateur a recliquez sur le bouton
     il suffit de mettre   -=   comme en dessous

    this.MouseClick -= new MouseEventHandler(Form1_MouseClick);

    et on  draw le cercle

    voila donc si on click sur la form au départ rien ne peut être dessinné vu que l' évenement qui  draw le cercle  se trouve dans l' évènement click bouton

    donc la g  jamais doublecliqué sur  Form1 pour créer un évènement

    @++
    mercredi 17 mars 2010 11:01
  • Désolé Dragonix, honnetement j'ai pas bien compris comment l'événement  Form1_MouseClick va  s'ajouté  au fichier.cs sans  selectionner la form puis aller au Events au menu propriété et cliquer double fois sur Mouse_Click pour crééer automatiquement le code?
    mercredi 17 mars 2010 12:16
  • si vous suivez le derniers post   le code va s' ajouté tout seul au moment au vous écrirez

    this.MouseClick +=        et la il vous propose d' écrire pour vous la futur void   en appuyant sur TAB 2 fois

    essayez

    ce code est un écouteur  sur l' évenement this.MouseClick  qui correspond  a un l' évenement clic dans le formulaire


    voila et je le répète visual studio C# comme basic vous offre la possibilité de faire pratiquement tout par l' IDE pour vous faciliter le travail  en cliquant sur des icon comme le panneau de propriété mais  en fait vous pouvez tout faire par programmation donc écrire du code dans le Form1.cs évenement écouteur etc.....

    voila par exemple le code qui permet d' écrire entièrement les évenemets les écouteur  sans passer par les doubleclick sur les bouton form1 etc...

    déposez un bouton dans le form et ajoutez le code suivant

    namespace
     
    Essaicercle 
    {
     
    public partial class Form1 : Form
    {
     
    public Form1() 
    {
    InitializeComponent();
    //même ligne de code que celle qui se trouverait dans le fichier disigner.cs si vous aviez double cliquez sur le bouton
    button1 .Click +=
    new EventHandler(button1_Click); 
    }
     
    private void drawCircle(int x, int y) 
    {
     
    Graphics g; 
    g = CreateGraphics();
     
    Rectangle myRectangle = new Rectangle(x, y, 40, 40); 
     
    Pen myPen = new Pen(Color.Blue, 4); 
     
    SolidBrush sb1 = new SolidBrush(Color.Black); // On cre un brush.
    g.FillEllipse(sb1,
    new Rectangle(new Point(x, y), new Size(40, 40))); 
    g.DrawEllipse(myPen, myRectangle);
    g.Dispose();
    }
     
    private void button1_Click(object sender, EventArgs e) 
    {
     
    //même ligne de code que celle qui se trouverait dans le fichier disigner.cs si vous aviez double cliquez sur le Form1
    this.MouseClick += new MouseEventHandler(Form1_MouseClick); 
    }
     
    void Form1_MouseClick(object sender, MouseEventArgs e) 
    {
     
    this.MouseClick -= new MouseEventHandler(Form1_MouseClick); 
    drawCircle(e.X, e.Y);
     
    //throw new NotImplementedException();
    }
     
    }
    }

     

     


    LENILAM

     

    • Marqué comme réponse Audrey PETIT mercredi 17 mars 2010 16:15
    mercredi 17 mars 2010 13:08
  • le probléme est résolue!
    Vraiment je sais pas comment je vous remercie Dragonix!!
    Un grand merci pour votre aide.
    mercredi 17 mars 2010 14:22
  • coool :)


    LENILAM
    mercredi 17 mars 2010 14:23