Dessiner rectangle de selection dans pictureBox

Résolu
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009 - 1 févr. 2008 à 12:30
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009 - 2 févr. 2008 à 12:46
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

vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009
2 févr. 2008 à 12:46
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 févr. 2008 à 13:55
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]
0
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009
1 févr. 2008 à 20:03
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
0
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009
1 févr. 2008 à 21:09
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
0
Rejoignez-nous