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

vboussema 138 Messages postés mercredi 1 février 2006Date d'inscription 1 septembre 2009 Dernière intervention - 26 janv. 2008 à 10:33 - Dernière réponse : vboussema 138 Messages postés mercredi 1 février 2006Date d'inscription 1 septembre 2009 Dernière intervention
- 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 

Votre réponse

1 réponse

Meilleure réponse
vboussema 138 Messages postés mercredi 1 février 2006Date d'inscription 1 septembre 2009 Dernière intervention - 26 janv. 2008 à 11:32
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

Merci vboussema 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de vboussema

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.