Evenement click

Résolu
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010 - 22 mars 2007 à 10:23
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010 - 28 mars 2007 à 13:44
Salut, j'ai fait une application en C# pour générer dynamiquement un tableau (lignes et des colonnes) avec "DRAWLINE".Je voudrai faire de telle sorte que si je double click sur une case que la couleur change.Si vous pouvez m'aider.
Merci.Je suis débutant.

10 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
22 mars 2007 à 18:51
Pour créer les rectangles dynamiquement c'est simple, tu imbriques 2 boucles for,  et pour la couleur qui doit rester j'ai défini une structure Cellule avec un bool IsSelected

public partial class Form1 : Form
{
    private struct Cellule
    {
        public Rectangle Bounds;
        public bool IsSelected;


        public Cellule( int x, int y, int w, int h )
        {
            this.Bounds = new Rectangle( x, y, w, h );
            this.IsSelected = false;
        }
    }


    private Cellule[ ] cellules = null;


    public Form1( )
    {
        InitializeComponent( );
        this.DoubleBuffered = true;


        int i = 0;
        cellules = new Cellule[ 6 ];


        for ( int y = 0; y < 2; y++ )
        {
            for ( int x = 0; x < 3; x++ )
            {
                cellules[ i++ ] = new Cellule( x * 50, y * 50, 50, 50 );
            }
        }
    }


    protected override void OnPaint( PaintEventArgs args )
    {
        //base.OnPaint( args );


        Graphics g = args.Graphics;
      
        for ( int i = 0; i < cellules.Length; i++ )
        {
            if ( cellules[ i ].IsSelected )
            {
                g.FillRectangle( Brushes.LightSteelBlue, cellules[ i ].Bounds );
                g.DrawRectangle( Pens.Blue, cellules[ i ].Bounds );
            }
            else
            {
                g.FillRectangle( Brushes.AliceBlue, cellules[ i ].Bounds );
                g.DrawRectangle( Pens.Black, cellules[ i ].Bounds );
            }
        }
    }


    protected override void OnMouseDown( MouseEventArgs args )
    {
        //base.OnMouseDown( args );


        if ( args.Clicks == 2 )
        {
            for ( int i = 0; i < cellules.Length; i++ )
            {
                if ( cellules[ i ].Bounds.Contains( args.Location ) )
                {
                    cellules[ i ].IsSelected = !cellules[ i ].IsSelected;
                    this.Invalidate( cellules[ i ].Bounds );
                    break;
                }
            }
        }
    }
}.
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
22 mars 2007 à 10:26
houla... si tu es débutant, je te conseille de passer par un ListView ou un GridView... tu ne sais pas dans quoi tu t'embarques sinon.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
22 mars 2007 à 10:33
j'avais essayé avec gridview,mais ca ne me permettait pas d'avoir le graphique que je voulais.Le but c d'avoir un graphique composée de petites cellules et de pouvoir changer la couleur si on double click sur une cellule.J'ai pu faire le graphique avec "DRAWLINE" en utilisant des lignes horizontales et verticales.Merci
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
22 mars 2007 à 10:46
Salut,
Le DataGridView permet de customizer chaque cellule, et répond également aux événements type double-clique.
Donc tu ne devrais pas avoir trop de problème à faire ce que tu veux, non ?

<hr />
-Blog-
0

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

Posez votre question
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
22 mars 2007 à 10:54
Merci.Je vais essayé de l'exploiter.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
22 mars 2007 à 12:04
Salut, utilises des rectangles..

public partial class Form1 : Form
{
    private Rectangle[ ] rects =
    {
        new Rectangle( 0, 0, 50, 50 ),
        new Rectangle( 50, 0, 50, 50 ),
        new Rectangle( 100, 0, 50, 50 ),
        new Rectangle( 0, 50, 50, 50 ),
        new Rectangle( 50, 50, 50, 50 ),
        new Rectangle( 100, 50, 50, 50 )
    };


    private Rectangle selectedRect = Rectangle.Empty;


    public Form1( )
    {
        InitializeComponent( );
        this.DoubleBuffered = true;
    }


    protected override void OnPaint( PaintEventArgs args )
    {
        //base.OnPaint( args );


        Graphics g = args.Graphics;
        g.FillRectangles( Brushes.AliceBlue, rects );
        g.DrawRectangles( Pens.Black, rects );


        if ( selectedRect != Rectangle.Empty )
        {
            g.FillRectangle( Brushes.LightSteelBlue, selectedRect );
            g.DrawRectangle( Pens.Blue, selectedRect );
        }
    }


    protected override void OnMouseDown( MouseEventArgs args )
    {
        //base.OnMouseDown( args );


        foreach( Rectangle r in rects )
        {
            if ( r.Contains( args.Location ) )
            {
                selectedRect = r;
                Invalidate( );
                break;
            }
        }
    }
}
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
22 mars 2007 à 15:50
Merci Lutinore,c déja pas mal avec le click.Mais je vais essayé de l'améliorer pour dessiner les rectangles dynamiquement selon le nombre de lignes que l'utilisateur saisi et valide au niveau d'une boite de dialogue .je vais aussi essayer de colorer la cellule avec une couleur qui va rester  en double cliquant et s'enléve avec un prochain double click.
Merci.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
22 mars 2007 à 18:56
Du code tout fait, que demander de plus?

<hr />
-Blog-
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
22 mars 2007 à 19:39
Oui la je suis parti pour réécrire le DataGridView
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
28 mars 2007 à 13:44
Merci Lutinore, c super cool.Je vais pouvoir utiliser le code pour avancer dans mon projet.
Merci encore
0
Rejoignez-nous