begin process at 2010 02 10 08:10:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Multimédia

 > 

Image et Vidéo

 > 

Effacer une Rectangle dessiné avec DrawRectangle()


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Effacer une Rectangle dessiné avec DrawRectangle()

mardi 29 avril 2008 à 10:26:12 | Effacer une Rectangle dessiné avec DrawRectangle()

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?

mardi 29 avril 2008 à 13:42:34 | Re : Effacer une Rectangle dessiné avec DrawRectangle()

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  )
mardi 29 avril 2008 à 15:49:58 | Re : Effacer une Rectangle dessiné avec DrawRectangle()

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?

mercredi 30 avril 2008 à 00:16:01 | Re : Effacer une Rectangle dessiné avec DrawRectangle()

Lutinore

Administrateur CodeS-SourceS
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( );
    };
}

mercredi 30 avril 2008 à 05:31:12 | Re : Effacer une Rectangle dessiné avec DrawRectangle()

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();

}

jeudi 1 mai 2008 à 01:03:16 | Re : Effacer une Rectangle dessiné avec DrawRectangle()

coq

Administrateur CodeS-SourceS
Salut,

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



/*
coq
MVP Visual C#
CoqBlog
*/


Cette discussion est classée dans : effacer, rectangle, dessiné, drawrectangle, ppen


Répondre à ce message

Sujets en rapport avec ce message

Dessins façon Paint [ par Franckyom50 ] J'aimerais savoir comment faire pour dessiner un rectangle, façon Paint : c-à-d cliquer a un endroit et en en restant appuyé, tracé un rectangle au fu Récupérer la taille d'une string [ par cpetitjean ] Y aurait-il un moyen de récupérer la taille d'une string quand on fait un graphics.DrawString() ??En fait je voudrais dessiner un rectangle autour d'u Image, Pixel, ... ? [ par streetlife ] Bonjour!Comment faire pour construire une image ou un bitmap avec un rectangle en coordonnées ecran.En effet, je souhaite construire une image (ou aut effacer un objet (genre bouton, zone de text) [ par Thanos_the_yopper ] comment on fait pour détruire définitivement un objet, quel qu'il soit ? que ce soit un bouton, une sone de texte, une listview ...Final Fantasy Memor Effacer la console [ par oberown ] Comment efface-t-on dans la console en C# ?Tel un cls ?Merci dessiner un rectangle sur les controles [ par LeGnuff ] Bonjour !j'ai un objget Graphics associé à une formj'aurais aimé savoir s'il y avait un moyen d'utiliser la méthodeGraphics.DrawRectangle(...) en fais Effacer un CurrencyManager [ par Choumi1980 ] Salut tout le monde,Est ce que quelqu'un sait me dire comment effacer un currencyManager ou me dire comment le mettre à jour si je fais une modif dans Comment générer un clic sur un objet dessiné avec g.Draw... ?? [ par hsmr ] Hello !J'ai un petit gros soucis!Je dessine une image avec g.DrawImage(...). J'aimerais générer le clic sur mon image et je n'y arrive pas.Qlq'1 aurai >>C# effacer un label créé dynamiquement [ par feuillou ] Bonjour a tous, Je cré dynamiquement suite a un clic un nombre aleatoire de label, je fais donc ainsi :for( v=0;v=var;v++){ Label lab_v = new Label(); avoir l'image d'un dessin dessiné sur une form [ par Fildomen ] salutje fais des dessins sur une form grace à le DrawLine, ensuite je veux avoir l'image de toute la form (System.drawing.image), pouvez-vous m'aider?


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales