IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Problème pour effacer un dessin


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut Problème pour effacer un dessin
    Bonjour à vous.

    Mon programme fonctionne comme suit :

    Quand je clique sur un bouton, il m'affiche un cercle avec des chiffres et quand je clique sur l'autre bouton, il m'affiche un cercle avec des carrés

    Je voudrais que pendant que je change de bouton, il efface le dessin précédent et ainsi de suite.

    Je n'y arrive pas. J'ai utilisé Dispose() mais sans succès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing.Drawing2D;
     
    namespace Exercice2
    {
        public partial class Form1 : Form
        {
            SolidBrush brosse = new SolidBrush(Color.Blue);
            SolidBrush brosse2 = new SolidBrush(Color.Black);
     
     
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void btnCarre_Click(object sender, EventArgs e)
            {
     
     
                Graphics g = this.CreateGraphics();
                g.TranslateTransform(this.ClientSize.Width / 2, ClientSize.Height / 2);
     
                for (int i = 0; i < 12; i++)
                {
                    g.RotateTransform(30);
                    g.FillRectangle(brosse2, 100, -5, 10, 10);
                }
     
            }
     
            private void btnChiffre_Click(object sender, EventArgs e)
            {
                Graphics h = this.CreateGraphics();
                h.TranslateTransform(this.ClientSize.Width / 2, ClientSize.Height / 2);
     
     
                double x, y;
                for (int i = 1; i <= 12; i++)
                {
                    int angle = i * 30 - 90;
                    x = Math.Cos(angle * Math.PI / 180) * 100;
                    y = Math.Sin(angle * Math.PI / 180) * 100;
                    FontFamily ff = new FontFamily("Times New Roman");
     
                    Font fnt = new Font(ff, .30f, GraphicsUnit.Inch);
                    h.DrawString(i + "", fnt, brosse, (float)x, (float)y);
     
                }
            }
     
     
     
     
     
        }
    }

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Tu a essayé

    Dans la mesure ou tu desine directement sur un Graphics crée sur ta form, il n'y a pas de remanence physique
    Le paint de ta form forcé par un refresh() eliminera ce que tu a dessiné dessus.
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut
    Et comment je fais pour ne pas effacer le dessin quand je clique sur le bouton.

    Il n'affiche plus le dessin maintenant

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Ben tu fais le refresh AVANT de dessiner evidement !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    surtout, pour que ça marche, tu arretes de faire de la m...

    La meilleure solution (et malheureusement pas l'unique) pour faire quelque chose de PROPRE, EFFICACE, Windows COMPLIANT, c'est de mettre le code
    qui fait le dessin soit directement dans la fonction OnPaint() soit dans une méthode appelée par la fonction OnPaint().

    Il faut surcharger le OnPaint() et gérer dedans l'affichage à faire en fonction de l'état qui correspond.

    Si tu fais autrement, tu auras à gérer des soucis liés au refresh (en fonction d'un resize, occultation de ta forme par une autre appli, etc...)

    Bref, si tu veux faire du bon code, tu mets le code dans le OnPaint().

    Désolé d'être un peu "directif" mais ce type de problématique revient souvient et si je peux comprendre qu'on ne puisse lire tous les postes pour savoir ce qui s'est déja dit, je me dis que parfois, la lecture des tutoriaux devraient etre "obligatoire"...

    Allez, fait tout le code de dessin dans le OnPaint() et tu verras comme le .Net c'est simple quand on s'est comment faire les choses
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/07/2008, 09h23
  2. problème pour effacer
    Par kristoch91 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/06/2008, 14h30
  3. Problème pour effacer plusieurs lignes dans grid DevExpress
    Par Cazaux-Moutou-Philippe dans le forum Langage
    Réponses: 0
    Dernier message: 08/02/2008, 13h41
  4. problème pour effacer
    Par looping dans le forum Windows XP
    Réponses: 4
    Dernier message: 17/06/2007, 19h17
  5. Problème pour effacer un élément fait par canvas
    Par matech dans le forum Langage
    Réponses: 4
    Dernier message: 20/04/2006, 23h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo