Dessiner rectangle de sélection [Résolu]

jesaipa_1 63 Messages postés dimanche 8 janvier 2006Date d'inscription 16 mai 2007 Dernière intervention - 18 janv. 2006 à 15:42 - Dernière réponse : bibinutz 32 Messages postés mercredi 13 avril 2005Date d'inscription 13 janvier 2009 Dernière intervention
- 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
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 19 janv. 2006 à 00:42
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 );
}
}
}

Merci Lutinore 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de Lutinore
Meilleure réponse
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 2 févr. 2006 à 16:18
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#
*/

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

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

>> NiCoMpX <<
Commenter la réponse de nicompx
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 18 janv. 2006 à 15:49
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
nicompx 107 Messages postés lundi 16 janvier 2006Date d'inscription 15 juillet 2009 Dernière intervention - 18 janv. 2006 à 15:55
0
Merci
Aujourd'hui, tout le monde mes des images invisible.... lol




>> NiCoMpX <<
Commenter la réponse de nicompx
jesaipa_1 63 Messages postés dimanche 8 janvier 2006Date d'inscription 16 mai 2007 Dernière intervention - 18 janv. 2006 à 17:08
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
jesaipa_1 63 Messages postés dimanche 8 janvier 2006Date d'inscription 16 mai 2007 Dernière intervention - 20 janv. 2006 à 09:14
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
jesaipa_1 63 Messages postés dimanche 8 janvier 2006Date d'inscription 16 mai 2007 Dernière intervention - 20 janv. 2006 à 09:38
0
Merci
dsl j'avais oublier de mettre using System.Drawing.Drawing2D;

Merci pour ce code
Commenter la réponse de jesaipa_1
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 2 févr. 2006 à 18:45
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
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 2 févr. 2006 à 18:50
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
z_san 81 Messages postés jeudi 2 février 2006Date d'inscription 24 mai 2007 Dernière intervention - 16 avril 2007 à 17:07
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
z_san 81 Messages postés jeudi 2 février 2006Date d'inscription 24 mai 2007 Dernière intervention - 18 avril 2007 à 09:50
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
jeru55555 7 Messages postés mercredi 6 juin 2007Date d'inscription 16 septembre 2007 Dernière intervention - 6 juin 2007 à 18:05
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
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 6 juin 2007 à 18:11
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
jeru55555 7 Messages postés mercredi 6 juin 2007Date d'inscription 16 septembre 2007 Dernière intervention - 6 juin 2007 à 18:23
0
Merci
et comment on fait ca stp?
je suis nouvelle

esther
Commenter la réponse de jeru55555
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 6 juin 2007 à 18:24
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
bibinutz 32 Messages postés mercredi 13 avril 2005Date d'inscription 13 janvier 2009 Dernière intervention - 29 janv. 2009 à 11:31
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
bibinutz 32 Messages postés mercredi 13 avril 2005Date d'inscription 13 janvier 2009 Dernière intervention - 29 janv. 2009 à 11:38
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.