Dessiner un rectangle de selection sur un panel [Résolu]

Messages postés
138
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
1 septembre 2009
- - Dernière réponse : vboussema
Messages postés
138
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
1 septembre 2009
- 26 janv. 2008 à 11:32
salut
j'aime dessiner sur une forme qui contient un panel qui contient une picturebox un rectangle de selection de telle sorte que le rectangle ne paret que dans le panel et bien sure sur le pic
j'ai pu dessiner le rectangle de selection grace au code de coq mais quand j'aime faire sa dans une form qui contient un panel sa marche pas(quand le debut de la selection est dans le panel)
donc il me faut koi???
je fait un controle qui hérite de panel pour ecrire au dessus ou koi???
le code qui me permet de dessiner le rectangle de selection est :

 bool go = false;
        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;// FrameStyle.Thick;

        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&&go)
            {
                // 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,Color.BlueViolet, SELECTION_STYLE);
            }

            this._selecting = false;
            go = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            go = true;
        }

//as you like
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
138
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
1 septembre 2009
3
Merci
bon j'ai trouv le truc

il fait que je cré un controle qui hérite de panel et on met le code qui permet de dessiner la selection

donc si je veu dessiner au dessus d'un panel je cré un controle qui
hérite de panel si j'aime dessiner sur un picture box je fai un
controle qui hérite de picture box


et sa marche simpa

voisi le code pour le panel
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]--> 
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
 
namespace test
{
public partial class panelli : Panel
{
public panelli()
{
InitializeComponent();
}
publicbool go = false;
privatebool _selecting = false;
private Point _selectionStartPoint = Point.Empty;
private Point _selectionEndPoint = Point.Empty;
private Rectangle _selectionRect = Rectangle.Empty;
 
privateconst FrameStyle SELECTION_STYLE = FrameStyle.Dashed;// FrameStyle.Thick;
 
protectedoverridevoid 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;
}
}
 
protectedoverridevoid OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
 
if(this._selecting && go)
{
// 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);
}
}
 
protectedoverridevoid OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
 
if(this._selecting)
{
// efface le rectangle de sélection
ControlPaint.DrawReversibleFrame(this._selectionRect, Color.BlueViolet, SELECTION_STYLE);
}
 
this._selecting = false;
go = false;
}
 

}
}
 
 

<!-- END TEMPLATE: bbcode_code -->

//as you like

Dire « Merci » 3

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

Codes Sources 128 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vboussema