Dessiner rectangle de sélection [Résolu]

Messages postés
63
Date d'inscription
dimanche 8 janvier 2006
Dernière intervention
16 mai 2007
- - Dernière réponse : bibinutz
Messages postés
32
Date d'inscription
mercredi 13 avril 2005
Dernière intervention
13 janvier 2009
- 29 janv. 2009 à 11:38
Slt a tous je voualis savoir cmt fait-on enfin cmt sappel la fonction qui dessine le rectangle en pointillé kan on selection un truc sur une page com en dessous :

Merci
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
3
Merci
Salut, voilà un exemple rudimentaire pour dessiner une sélection sur ta forme, après par exemple tu peux tester si ton contrôle est contenu dans la sélection avec la méthode Rectangle.Contains.

public partial class Form1 : Form
{
private bool down = false;
private Pen pen = null;
private int x = 0;
private int y = 0;
private int w = 0;
private int h = 0;


public Form1( )
{
InitializeComponent( );


this.SetStyle
(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.DoubleBuffer,
true
);


pen = new Pen( Color.Black );
pen.DashStyle = DashStyle.Dash;
}


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


x = e.X;
y = e.Y;
down = true;
}


protected override void OnMouseUp( MouseEventArgs e )
{
// base.OnMouseUp( e );


down = false;
Invalidate( this.ClientRectangle ); // Efface la séléction.
}


protected override void OnMouseMove( MouseEventArgs e )
{
// base.OnMouseMove( e );


if ( down )
{
w = e.X - x;
h = e.Y - y;
Invalidate( this.ClientRectangle ); // Dessine la séléction.
}
}


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


Graphics g = e.Graphics;


if ( down )
{
g.DrawRectangle( pen, x, y, w, h );
}
}
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Lutinore
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
3
Merci
Salut,

Bon, j'arrive après la bataille mais mieux vaut tard que jamais ^^

L'inconvénient avec la méthode citée plus haut est quand même que le trait de sélection n'est pas dessiné sur les contrôles enfants.
Pour celà notre ami le Framework contient la classe ControlPaint et sa méthode DrawReversibleFrame :-)

private bool _selecting = false;
private Point _selectionStartPoint = Point.Empty;
private Point _selectionEndPoint = Point.Empty;
private Rectangle _selectionRect = Rectangle.Empty;

private const FrameStyle SELECTION_STYLE = FrameStyle.Dashed;


protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown (e);


if ( e.Button == MouseButtons.Left )
{
this._selecting = true;
this._selectionStartPoint = this.PointToScreen(new Point(e.X, e.Y));
this._selectionEndPoint = Point.Empty;
this._selectionRect = Rectangle.Empty;
}
}


protected override void OnMouseMove( MouseEventArgs e )
{
base.OnMouseMove( e );


if ( this._selecting )
{
// efface le rectangle de sléection précédent
ControlPaint.DrawReversibleFrame(this._selectionRect, this.BackColor, SELECTION_STYLE);


// calcul du nouveau rectangle
this._selectionEndPoint = this.PointToScreen(new Point(e.X, e.Y));
this._selectionRect = new Rectangle(
this._selectionStartPoint.X,
this._selectionStartPoint.Y,
this._selectionEndPoint.X - this._selectionStartPoint.X,
this._selectionEndPoint.Y - this._selectionStartPoint.Y
);


// dessin du nouveau rectangle
ControlPaint.DrawReversibleFrame(this._selectionRect, this.BackColor, SELECTION_STYLE);
}
}


protected override void OnMouseUp( MouseEventArgs e )
{
base.OnMouseUp( e );


if ( this._selecting )
{
// efface le rectangle de sélection
ControlPaint.DrawReversibleFrame(this._selectionRect, this.BackColor, SELECTION_STYLE);
}


this._selecting = false;
}

/*
coq
MVP Visual C#
*/

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_coq
Messages postés
107
Date d'inscription
lundi 16 janvier 2006
Dernière intervention
15 juillet 2009
0
Merci
Est-ce que tu peux être plus précis stp.

>> NiCoMpX <<
Commenter la réponse de nicompx
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
0
Merci
Salut

On ne peut pas voir ton image, car elle est en local sur ton ordinateur.
Je te demanderais aussi un effort sur la structure de ta phrase, le langage sms est proscrit sur ce forum.



Mx
MVP C#
Commenter la réponse de MorpionMx
Messages postés
107
Date d'inscription
lundi 16 janvier 2006
Dernière intervention
15 juillet 2009
0
Merci
Aujourd'hui, tout le monde mes des images invisible.... lol




>> NiCoMpX <<
Commenter la réponse de nicompx
Messages postés
63
Date d'inscription
dimanche 8 janvier 2006
Dernière intervention
16 mai 2007
0
Merci
ok je vais faire un effort sur mon ecriture donc je voulais savoir :

j'ai sur mon formulaire plusieurs panel l'un en dessous de l'autre (vous voyez comment )
je voudrais faire une selection en tenant le click gauche de ma souris et en descendant

(c'est comme sur le bureau quand on tient le click gauche et on descend ya un rectangle en pointillé qui apparait )

je voudrais faire la même chose.

Si j'ai pas encore était claire n'hesité pas à me poser des questions.

Merci.
Commenter la réponse de jesaipa_1
Messages postés
63
Date d'inscription
dimanche 8 janvier 2006
Dernière intervention
16 mai 2007
0
Merci
Lutinore merci pour ce script mais il y a juste une petite erreur sur sa (enfin sa me génère une petite erreur)


pen.DashStyle = DashStyle.Dash;

Le DashStyle.Dash il ne le reconnait pas
Commenter la réponse de jesaipa_1
Messages postés
63
Date d'inscription
dimanche 8 janvier 2006
Dernière intervention
16 mai 2007
0
Merci
dsl j'avais oublier de mettre using System.Drawing.Drawing2D;

Merci pour ce code
Commenter la réponse de jesaipa_1
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
0
Merci
J'ai précisé que c'était un exemple rudimentaire

C'était surtout pour montrer le principe de l'utilisation du MouseDown, MouseMove et MouseUp pour dessiner une sélection.

Ton code est vraiment mieux, d'ailleurs je connaissais même pas DrawReversibleFrame et même en lisant la définition je crois que j'aurais pas deviné à quoi ça servait :P
Commenter la réponse de Lutinore
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
C'est vrai que cette pauvre classe ControlPaint n'est pas très connue.
Elle s'ennuie, toute seule dans son coin ^^

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
Messages postés
81
Date d'inscription
jeudi 2 février 2006
Dernière intervention
24 mai 2007
0
Merci
Bonjour

Justement je cherchais un code de ce type, par contre je devrais le modifier un peut.

Je réalise une appli qui affiche des chronogrames que je dessine dans une picturBox, je n'ai juste besoin que d'un trait vertical qui bouge avec la souris (inscrit dans la picturbox) et avec le bouton gauche dow fait une sélection (pour une mesure de tps par exemple.

Merci si vous avez la solution, j'ai cherché toute l'aprem mais j'ai pas encore trouvé.
Commenter la réponse de z_san
Messages postés
81
Date d'inscription
jeudi 2 février 2006
Dernière intervention
24 mai 2007
0
Merci
J'ai bien réussie à faire ma barre verticale qui bouge sur ma picturebox quand je déplace la souris, mais le dessin dessiné dedans s'efface quand je bouge la barre, j'ai du oubluié un truc dans mon Paint (), voud avez une idée ?
Commenter la réponse de z_san
Messages postés
7
Date d'inscription
mercredi 6 juin 2007
Dernière intervention
16 septembre 2007
0
Merci
salut tout le monde j ai un devoir a faire sur visual c#
je l ai fait sur application console

il s agit de faire des codes pour avoir le perimetre et l aire d un rectangle
ca j ai plus ou moins reussi
ca se complique qd ils me demandent que le rectangle apparaissent
et je ne sais pas comment faire
on me demande d utiliser console.write pour la partie superieur gauche

                        | 
                        |
                        |                          | <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>                        |  

------------------------------ 

                        |                  |

                        |                  |

                        |                  |

                        |                  |

                        -------------
<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??><v:line id="_x0000_s1026" style="Z-INDEX: 1; POSITION: absolute; flip: x y" from="18pt,6.75pt" to="74.25pt,7.5pt"></v:line>                                                                      

            ps : les traits en rouges sont censes etre des traits continus         
<v:line id="_x0000_s1026"></v:line> 
esther
Commenter la réponse de jeru55555
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
0
Merci
Salut,

Je te conseille de reouvrir un sujet, ton probleme concernant une application console alors que le sujet original portait sur une application windows form (et tu pense bien que c'est complétement différent )

Avec un sujet tout neuf, les gens qui auront par la suite le meme probleme que toi trouveront plus facilement, et tu auras + de réponse car  + de visibilité (page d'accueil)

Mx
MVP C# 
Commenter la réponse de MorpionMx
Messages postés
7
Date d'inscription
mercredi 6 juin 2007
Dernière intervention
16 septembre 2007
0
Merci
et comment on fait ca stp?
je suis nouvelle

esther
Commenter la réponse de jeru55555
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
0
Merci
Sur la page d'accueil, tu as une colonne qui reprends les derniers sujets postés sur le forum.
Et tu as un petit lien qui te permet de poser une nouvelles question

Bienvenue parmis nous

Mx
MVP C# 
Commenter la réponse de MorpionMx
Messages postés
32
Date d'inscription
mercredi 13 avril 2005
Dernière intervention
13 janvier 2009
0
Merci
Bonjour,

Je me suis inspire des exemples de ce post pour dessiner un rectangle dans une picturebox à l'aide de la souris. Cependant, j'ai un probleme de rafraichissement : il me trace tous les rectangles pour chaque nouvelles coordonnees de ma souris. Comment supprimer les anciens rectangles ?

Voici mon code :

public

partial
class
Form1 :
Form{

int x1, y1;

bool down=
false;

public Form1(){

InitializeComponent();

}

private
void pictureBox1_MouseDown(
object sender,
MouseEventArgs e){

x1 = e.X;

y1 = e.Y;

down =

true;}

private
void pictureBox1_MouseMove(
object sender,
MouseEventArgs e){

if (down){

Bitmap toto =
new
Bitmap(pictureBox1.Image);

using (
Graphics g =
Graphics.FromImage(toto)){

g.DrawRectangle(

Pens.Beige, x1, y1, e.X - x1, e.Y - y1); pictureBox1.Image = toto;

}

}

}

private
void pictureBox1_MouseUp(
object sender,
MouseEventArgs e){

down =

false;}

}

Merci.

Stephan.
Commenter la réponse de bibinutz
Messages postés
32
Date d'inscription
mercredi 13 avril 2005
Dernière intervention
13 janvier 2009
0
Merci
C'est bon je vois ou j'ai fait mon erreur. C'est parce que je reprends l'image de la picturebox au lieu de prendre l'image "originale".
Commenter la réponse de bibinutz

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.