Dessiner rectangle de selection dans pictureBox [Résolu]

Signaler
Messages postés
138
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
1 septembre 2009
-
Messages postés
138
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
1 septembre 2009
-
salut
j'aime dessiner un rectangle de selection sur un PictureBox situé dans un panel
et j'aime que la selection ne dépasse pas le picture box donc la méthode drowreversibleFrame ne marche pas(sinon avec modification)
et par la suite je veut que ce rectangle soi persistant jusqu'a le prochain click ;)
(et bien sure ne disparet pas si une forme vient audessus de celle ci)
merci pour l'aide

//as you like

4 réponses

Messages postés
138
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
1 septembre 2009
1
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
il faut que tu fasses cela dans l'évènement OnPaint du PictureBox.

Utilise la méthode ControlPaint.DrawFocusRectangle()

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
138
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
1 septembre 2009
1
salut;
merci pour la réponse je vai essayer mais je pense pas que sa va résoudre le problème mais éspérons bien que sa marche car il paret que toutes les méthodes de controlpaint déssine sur l'ecran et pas sur un control

//as you like
Messages postés
138
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
1 septembre 2009
1
j'ai pas pu faire marcher ce truc en fait il ne dessine pas comme je veut si tu peut me donner un bout de code :(
privatebool _selecting = false;
private Point _selectionStartPoint = Point.Empty;
private Point _selectionEndPoint = Point.Empty;
private Rectangle _selectionRect = Rectangle.Empty;
 
// private Point _LastPoint = Point.Empty;
public Rectangle _LastselectionRect = Rectangle.Empty;
private Point _laststrart = Point.Empty;
private Point _lastend = Point.Empty;

protectedoverridevoid OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
 
if(e.Button == MouseButtons.Left)
{

this.Invalidate();
this._selecting = true;
//pour lecran
this._selectionStartPoint = this.PointToScreen(new Point(e.X, e.Y));
this._selectionEndPoint = Point.Empty;
this._selectionRect = Rectangle.Empty;

//pour le last ;)
_laststrart = new Point(e.X, e.Y);//les vrai valeures ;)
_lastend = Point.Empty;
_LastselectionRect = Rectangle.Empty;
}

}
 
protectedoverridevoid OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
 
if(this._selecting)//pour dessiner le rect

{
//effacer le last
ControlPaint.DrawFocusRectangle(this.CreateGraphics(), _LastselectionRect, Color.Red, Color.Transparent);
// 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
);
// calcul du nouveau rectangle vrai ;)
_lastend =new Point(e.X, e.Y);
_LastselectionRect = new Rectangle(
_laststrart.X,
_laststrart.Y,
_lastend.X - _laststrart.X,
_lastend.Y - _laststrart.Y
);
////pour le rectangle de selection
//Graphics g = this.CreateGraphics();//.Graphics;
//Rectangle inner = _selectionRect;
//inner.Inflate(-2, -2);
//ControlPaint.DrawSelectionFrame(g, false, _selectionRect, inner, Color.Transparent);
// dessin du nouveau rectangle
//ControlPaint.DrawReversibleFrame(this._selectionRect, this.BackColor, SELECTION_STYLE);
//pour le focus
ControlPaint.DrawFocusRectangle(this.CreateGraphics(), _LastselectionRect, Color.Red, Color.Transparent);
}
}
 
protectedoverridevoid OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
 
if((this._selecting))
{
// efface le rectangle de sélection
//ControlPaint.DrawReversibleFrame(this._selectionRect, this.BackColor, SELECTION_STYLE);
//ControlPaint.DrawReversibleFrame(this._selectionRect, this.BackColor, SELECTION_STYLE);
ControlPaint.DrawFocusRectangle(this.CreateGraphics(),_LastselectionRect, Color.Red, this.BackColor);
_LastselectionRect = _selectionRect;

 

}

this._selecting = false;

}

 seci ne marche pas aussi
il ne dessine rien
et quand je fait drawselectionframe il y a un movais affichage car il y a une suite de rectangle en plus la selection n'est pas inversibe donc comment gérer sa???
si vous pouvez me donner un bout de code car je parvient pas a résoudre ça et merci [auteur/SEBMAFATE/53675.aspx sebmafate]

//as you like