begin process at 2008 07 20 03:24:38
1 213 119 membres
42 nouveaux aujourd'hui
14 166 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Effacer une Rectangle dessiné avec DrawRectangle() [ Multimédia / Image et Vidéo ] (cAlebcore)

Effacer une Rectangle dessiné avec DrawRectangle() le 29/04/2008 10:26:12

cAlebcore
Salut

Ca fait au moins une bonne heure que je cherche la solution à mon problème, et à mon avis ça doit être très simple:

J'ai une PictureBox sur laquelle l'utilisateur peut dessiner un rectangle. J'utilise DrawRectangle() et les quatres coordonnées (X, Y, Width, Height) viennent de 4 NumericUpDown. Dès que l'utilisateur modifie un de ces quatre NumericUpDown, j'appelle la fonction qui dessine mon rectangle:

privatevoid RefreshRect()

{

Pen pPen = newPen(Color.Red, 1);

picVideoPreview.CreateGraphics().DrawRectangle(pPen, X, Y, cWidth, cHeight);

pPen.Dispose();

}



Tout fonctionne bien, sauf que seulement, lors ce qu'on dessine le deuxième triangle, le premier est toujours là et je voudrais qu'il disparaisse... Vous voyez ce que je veux dire?


Re : Effacer une Rectangle dessiné avec DrawRectangle() le 29/04/2008 13:42:34

Liverion
Tu as essayé en faisant un Dispose de ta pictureBox avant de tracer le nouveau rectangle ? (enfin je connais pas trop les pictures box et j'essaie de voir avec l'interface de VS2005 version allemande  :P  )

Re : Effacer une Rectangle dessiné avec DrawRectangle() le 29/04/2008 15:49:58

cAlebcore

Ach, es geht nicht!

J'ai essayé de mettre un picVideoPreview.Dispose() juste avant de faire mon rectangle, mais j'ai une exception:

L'exception System.ObjectDisposedException n'a pas été gérée
  Message="Impossible d'accéder à un objet supprimé.\r\nNom de l'objet : 'PictureBox'."

Faut dire que là je nage un peu, je vois pas le rapport... Néanmoins, j'ai essayé avant chaque dessins de rectangles de recharger mon image dans ma PictureBox puis de faire un DoEvents(). Ca marche à moitier, car dès que je clique plusieurs fois de suite rapidement sur mes NumericUpDown (ceux qui dessinent le rectangle, donc) j'ai une exception. (NullReferenceException sur la ligne Application.DoEvents()).

Une autre idée?


Re : Effacer une Rectangle dessiné avec DrawRectangle() le 30/04/2008 00:16:01

Lutinore
(Admin CS)
Réponse acceptée !

Salut, non sérieusement Disposer la PictureBox juste avant de dessiner dessus c'est n'importe quoi.. Dispose ça revient quasiment à supprimer la PictureBox de la mémoire. Suffit juste d'invalider la zone à redessiner :

public Form1( )
{
    InitializeComponent( );

    PictureBox pb = new PictureBox( );
    pb.Parent = this;
    pb.Dock = DockStyle.Fill;
    //pb.Image = this.Icon.ToBitmap( ); // pour l'exemple.
    //pb.SizeMode = PictureBoxSizeMode.StretchImage;

    Button b1 = new Button( );
    b1.Parent = this;
    b1.Text = "Draw";
    b1.Dock = DockStyle.Bottom;
    b1.Click += delegate
    {
        using ( Graphics g = pb.CreateGraphics( ) )
        {
            g.DrawRectangle( Pens.Red, 10, 10, 50, 50 );
        }
    };

    Button b2 = new Button( );
    b2.Parent = this;
    b2.Text = "Erase";
    b2.Dock = DockStyle.Bottom;
    b2.Click += delegate
    {
        pb.Invalidate( pb.ClientRectangle ); // ou un rectangle plus petit.
        pb.Update( );
    };
}


Re : Effacer une Rectangle dessiné avec DrawRectangle() le 30/04/2008 05:31:12

cAlebcore
Magnifique ça marche parfaitement. Merci beaucoup!

Je met mon code final au cas oú ça intéresserait quelqu'un:

privatevoid RefreshRect()

{

X = System.

Convert.ToInt64(numX.Value);

Y = System.

Convert.ToInt64(numY.Value);

cWidth = System.

Convert.ToInt64(numWidth.Value);

cHeight = System.

Convert.ToInt64(numHeight.Value);

Pen pPen = newPen(Color.Red, 1);

picVideoPreview.Invalidate(picVideoPreview.ClientRectangle);

picVideoPreview.Update();

picVideoPreview.CreateGraphics().DrawRectangle(pPen, X, Y, cWidth, cHeight);

pPen.Dispose();

}


Re : Effacer une Rectangle dessiné avec DrawRectangle() le 01/05/2008 01:03:16

coq
(Admin CS)
Salut,

Sinon pour un rectangle de ce genre les fonctionnalités exposées par ControlPaint sont peut être à envisager.



/*
coq
MVP Visual C#
CoqBlog
*/


Classé sous : effacer, rectangle, dessiné, drawrectangle, ppen

Participer à cet échange

Livres en rapport

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS