Dessiner rectangle de sélection

Résolu
jesaipa_1 Messages postés 63 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 16 mai 2007 - 18 janv. 2006 à 15:42
bibinutz Messages postés 32 Date d'inscription mercredi 13 avril 2005 Statut Membre 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
A voir également:

18 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
2 févr. 2006 à 16:18
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#
*/
3
nicompx Messages postés 107 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 15 juillet 2009
18 janv. 2006 à 15:45
Est-ce que tu peux être plus précis stp.

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




>> NiCoMpX <<
0

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

Posez votre question
jesaipa_1 Messages postés 63 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 16 mai 2007
18 janv. 2006 à 17:08
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.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
19 janv. 2006 à 00:42
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 );
}
}
}
0
jesaipa_1 Messages postés 63 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 16 mai 2007
20 janv. 2006 à 09:14
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
0
jesaipa_1 Messages postés 63 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 16 mai 2007
20 janv. 2006 à 09:38
dsl j'avais oublier de mettre using System.Drawing.Drawing2D;

Merci pour ce code
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 févr. 2006 à 18:45
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
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
2 févr. 2006 à 18:50
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#
*/
0
z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007
16 avril 2007 à 17:07
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é.
0
z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007
18 avril 2007 à 09:50
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 ?
0
jeru55555 Messages postés 7 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 16 septembre 2007
6 juin 2007 à 18:05
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
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
6 juin 2007 à 18:11
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# 
0
jeru55555 Messages postés 7 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 16 septembre 2007
6 juin 2007 à 18:23
et comment on fait ca stp?
je suis nouvelle

esther
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
6 juin 2007 à 18:24
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# 
0
bibinutz Messages postés 32 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 13 janvier 2009
29 janv. 2009 à 11:31
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.
0
bibinutz Messages postés 32 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 13 janvier 2009
29 janv. 2009 à 11:38
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".
0
Rejoignez-nous