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 :

Modification d'un graphic---> suite [Débutant]


Sujet :

Windows Forms

  1. #1
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Modification d'un graphic---> suite
    Bonjour,

    Je débute en C#, mon programme doit modifier un graphique mais je ne comprends pas bien comment accéder à ce graphique.

    J'ai une première classe qui gère la fenetre principale Form1 dans laquelle s'affiche le graphique dès l'affichage de la fenetre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      private void Form1_Paint(object sender, PaintEventArgs e)
            {
                ...
                Graphics g = CreateGraphics();
                .....
                g.DrawLine(....);
                ....
                g.Dispose();           
            }
    Sur cette fenêtre form1, il y a également un button OK qui devrait me permettre de tracer d'autres lignes par exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void OKSaisieHoraires_Click(object sender, EventArgs e)
            {
             g.DrawLine(....);
            }
    Sauf que dans cette deuxième fonction, mon Graphic "g" n'est pas connu.
    Y'a t'il moyen d'en faire une variable globale ? Ou alors d'en faire une propriété de ma fenêtre principale afin de pouvoir y accéder de partout ?
    D'une manière générale, je ne comprends pas bien comment interagir sur les composants d'une fentre A depuis une fenetre B.
    D'avance je vous remercie pour votre aide.
    Stef

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Salut,

    Lorsque tu entres des données tu dois appeler la fonction.

    de ta form. Cela lancera l'événement Paint.

    Le travail doit donc être fait dans le Paint.

    Il faut que tu donnes à Paint les info dont il a besoin pour tout dessiner correctement au moment T. (un contexte de choses à faire)

    Tu peux par exemple stocker dans une liste tous les segments que tu veux dessiner et faire dans le paint un foreach sur cette liste en dessinant les segments.

    genre :

    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
     
    private List<Segment> segmentList = new List<Segment>();
     
    private void OKSaisieHoraires_Click(object sender, EventArgs e)
    {
    segmentList.Add(new Segment(...,..,..,...));
    Refresh();
    }
     
     
    private void Form1_Paint(object sender, PaintEventArgs e)
    {
    ...
    Graphics g = CreateGraphics();
     
    foreach(var s in segmentList)
    {
    g.DrawLine(...);
    }
     
    g.Dispose();
    }
    En supposant que tu as une classe Segment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Segment
    {
    public PointF Origin;
    public PointF Dest;
    }

  3. #3
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup, je crois que je vois mieux comment çà fonctionne !

  4. #4
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Bon, finalement, il y a toujours un truc que je n'ai pas compris concernant la portée des variables...
    1) j'ai un premier fichier dans lequel je déclare une classe "PlageHoraires" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    namespace Evadom_V1
    {
        public class PlagesHoraires 
        {
            public int HeureDebut { get; set; }
            public int MinuteDebut { get; set; }
            public int HeureFin { get; set; }
            public int MinuteFin { get; set; }
            public int ModuleDepart { get; set; }
        }
    }
    2) Un deuxième fichier dans lequel je souhaite créer une liste d'objets de la classe "PlageHoraires". Chaque objet "H" est ajouté à la liste "Horaires"

    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
    namespace Evadom_V1
    {
        public partial class SaisieHoraireDebutFin : Form
        {
            public SaisieHoraireDebutFin()
            {
                InitializeComponent();
            }
    
            private List<PlagesHoraires> Horaires = new List<PlagesHoraires>();
    
            private void OKSaisieHoraires_Click(object sender, EventArgs e)
            {
                PlagesHoraires H = new PlagesHoraires();
    
    
                H.HeureDebut = this.dateTimeHDebut.Value.Hour;
                H.MinuteDebut = this.dateTimeHDebut.Value.Minute;
    
                H.HeureFin = this.dateTimeHFin.Value.Hour;
                H.MinuteFin = this.dateTimeHFin.Value.Minute;
    
                H.ModuleDepart = 6;
    
                this.Close();
    
                Horaires.Add(H);
    
                Refresh();
    
            }
    
    
        }
    }
    3) Pourtant, manifestement ma liste n'est connue que localement car quand je l'appelle dans le troisième fichier qui contient la classe de ma fenêtre principale, j'ai le message :" Erreur 1 Le nom 'Horaires' n'existe pas dans le contexte actuel"

    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
    namespace Evadom_V1
    {
    
    
        public partial class Form1 : Form
        {
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                ****
    
                foreach (var h in Horaires)
                {
                } 
    
                ****
    
    
            }
    Comment dois-je déclarer ma liste "Horaires" pour qu'elle soit utilisable dans Form1_Paint ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 35
    Points
    35
    Par défaut
    Il te faut passer une référence de ta variable Horaires à ta classe Form1.
    Horaires est une variable privée de la classe SaisieHoraireDebutFin, elle n'est donc visible que de la classe SaisieHoraireDebutFin.

  6. #6
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup. Par contre, concrétement, je ne vois pas bien comment procéder. Pourrais tu préciser ?
    D'avance merci !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Ce n'est plus un problème de dessin mais un autre sujet

    Ta classe Form1 ne connait pas ta liste List<PlagesHoraires> Horaires
    que tu as déclarée dans une autre classe (en variable privée de surcroît)

    Ce que tu peux faire au lieu de passer une référence c'est de déclarer ta liste dans une classe statique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static class Contexte
    {
       public static List<PlagesHoraires> Horaires = new List<PlagesHoraires>();
    }
    tu pourras alors y accéder d'un peu où tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    {
    ...
                this.Close();
     
                Contexte.Horaires.Add(H);
     
                Refresh();
    ...
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                ****
     
                foreach (var h in Contexte.Horaires)
                {
                } 
     
                ****
     
     
            }

  8. #8
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Génial, çà marche et en plus je crois que ce coup ci j'ai compris ! Un grand merci à vous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/05/2014, 15h36
  2. Réponses: 2
    Dernier message: 16/02/2008, 21h05
  3. declencher une macro suite a une modification d une feuille Excel
    Par chamus dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 11/01/2007, 09h50
  4. rafraichissement formulaire suite modif sous-form
    Par pontoise dans le forum IHM
    Réponses: 5
    Dernier message: 24/11/2006, 23h46
  5. Modification d'une combo suite à la saisi dans un champ texte
    Par GabriHell dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2006, 17h48

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