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

C# Discussion :

Problème avec les couleurs de mon calendrier personnalisé.


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2013
    Messages : 42
    Points : 25
    Points
    25
    Par défaut Problème avec les couleurs de mon calendrier personnalisé.
    Bonjour tout le monde,

    J'ai créé un calendrier personnalisé, d'après un tuto YouTube.
    Il s'affiche très bien, mais j'ai un souci avec la couleur des cases lorsque je clique dessus.

    La case cliquée s'affiche en bleu clair, et lorsque je clique sur une autre case, j'aimerai qu'elle redevienne blanche, donc qu'il n'y ait qu'une seule case bleu clair.

    Voici mon code, pour l'instant :

    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 panel1_Click(object sender, EventArgs e)
     {
     
        this.BackColor = Color.White;
         if (sender == panel1)
         {
     
             this.BackColor = Color.LightBlue;         
     
         }
     
     
     }
    Et voici ce que donne mon calendrier, avec plusieurs casses bleues.

    Nom : calendrier.png
Affichages : 147
Taille : 10,1 Ko

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2022
    Messages : 222
    Points : 444
    Points
    444
    Par défaut
    Citation Envoyé par Patrick-06 Voir le message


    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 panel1_Click(object sender, EventArgs e)
     {
     
        this.BackColor = Color.White;
         if (sender == panel1)
         {
     
             this.BackColor = Color.LightBlue;         
     
         }
     
     
     }
    Bonjour,
    Ca manque un poil de code à mon goût ...
    Et puis sinon si tu pouvais mettre le lien du tuto ca pourrait aider à savoir comment ton truc est bidouillé


    Cdt
    Un problème sans solution est un problème mal posé. (Albert Einstein)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2013
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Merci gabi,

    Voici le lien du tuto
    ,
    à la différence que je l'ai fait sur un contôle réutilisable, pour l'exploiter sur d'autres formulaires.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 417
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 417
    Points : 2 075
    Points
    2 075
    Par défaut
    Je dirais que le souci est a priori réglé au time-code 4:48 de ta vidéo tuto

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2013
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Merci umfred,

    Non, pas vraiment.
    Lorsqu'il clique sur une case, elle se colore, et s'il clique sur une autre, la première ne s'éteint pas, il dois recliquer dessus pour l'éteindre.

    (Contrairement à lui, je n'ai pas mis de checkBox, je clique sur le panel1 pour changer sa couleur.)

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 684
    Points : 1 190
    Points
    1 190
    Par défaut
    Bonsoir
    voir ici

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 417
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 417
    Points : 2 075
    Points
    2 075
    Par défaut
    Le plus simple serait de remettre systématiquement la couleur par défaut sur tous les panels du contrôle avant de changer la couleur du panel cliqué.
    Et je ne ferai qu'une seule fonction événement qui s'applique à tous les panels de date.

    Quelque chose comme ça (pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void panel1_Click(object sender, EventArgs e)
     {
        Foreach(c as Panel in sender.Parent.Controls)
        {
             c.BackColor = Color.White;
             if (c==sender)
            {
                  c.BackColor = Color.LightBlue;         
            }
        }
     }
    PS: le checkbox permettait de savoir l'état du panel, cliqué/sélectionné ou pas; ça pourrait être remplacée par une simple variable du contrôle gérée de la même façon)

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2013
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Merci umfred pour ce code, mais je n'ai pas pu le mettre en oeuvre.
    le "in" et le "Parent" sont soulignés en rouge. " in attendu " " Parent n'est pas un membre de sendrer "

    J'ai mis une checkBox de la taille du panel1 et je l'ai rendue invisible.

    J'ai pu allumer la date du jour en orange et les cases cliquées en bleu clair.

    Voici le code.

    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
    private void panel1_Click(object sender, EventArgs e)
     {
     
         if (checkBox1.Checked == false)
         {
             checkBox1.Checked = true;
             this.panel1.BackColor = Color.White;
         }
         else
         {
             checkBox1.Checked = false;
             this.panel1.BackColor = Color.LightBlue;
         }
     
         string dtoday = DateTime.Now.ToString("d");
         string[] dtj = dtoday.Split('/');
         int dtji = Convert.ToInt32(dtj[0]);
         int dtm = Convert.ToInt32(label1.Text);
     
         if (dtji == dtm)
         {
             this.panel1.BackColor = Color.Orange;
         }
    et voici l'image du calendrier :

    Nom : calendrier2.png
Affichages : 101
Taille : 10,1 Ko

  9. #9
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 506
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 506
    Points : 20 792
    Points
    20 792
    Par défaut
    Citation Envoyé par Patrick-06 Voir le message
    J'ai mis une checkBox de la taille du panel1 et je l'ai rendue invisible.
    bonjour je pense que vous devez faire tout par vous-même c.a.d .il faut utiliser au besoin les fonctions de Gdi+ plutôt que d'utiliser des classes "toutes-faites" et dessiner les rectangles.
    Et faire du code associé à l'événement click-souris.
    Parce qu'autrement avec les classes "toutes-faites" les fonctionnalités finissent par être limitées et donc contraignantes.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2013
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Merci Mat.M,

    Je débute et je ne comprends pas bien ce que je fais.

    J'ai cherché sur la toile pour dessiner des rectangles.

    Voici un bout de code que j'essaie de faire fonctionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private void DessinRectangle(Graphics graph)
     {
         Rectangle rectangle = new Rectangle(5, 5, 100, 45);
     
         graph.FillRectangle(Brushes.White, rectangle);
         graph.DrawRectangle(Pens.Black, rectangle);
     
     }
    Mais lorsque je l'appelle, il m'est demandé des arguments.
    Je ne sais que faire, peut être pouvez vous m'éclairer ?

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 684
    Points : 1 190
    Points
    1 190
    Par défaut
    Bonsoir
    Citation Envoyé par Patrick-06 Voir le message
    Merci umfred pour ce code, mais je n'ai pas pu le mettre en oeuvre.
    le "in" et le "Parent" sont soulignés en rouge. " in attendu " " Parent n'est pas un membre de sender "
    Pour "in" en rouge : une instruction Foreach demande un type puis son identificateur du genre :
    Pour "Parent" : L'Objet Sender demande une conversion explicite du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Panel Pnl = (Panel)sender;
    Après il me semble bien de finir un projet pour avancer.
    Alors dans l'esprit du code umfred, vous pouvez tester celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            private void panel1_Click(object sender, EventArgs e)
            {
                Panel Pnl = (Panel)sender;
                ucDay uc = (ucDay)Pnl.Parent!;
     
                foreach (ucDay ucd in uc.Parent!.Controls)
                {
                    ucd.BackColor = Color.White;
                    if (ucd == uc)
                    {
                        ucd.BackColor = Color.LightBlue;
                    }
                }
            }
    Panel à un parent ucDay qui a lui aussi un parent FlowLayoutPanel.
    Ici on récupère tous les ucDay du flowlayoutPanel pour les "blanchir".
    Et au passage si on tombe sur le Panel qui a envoyé l'événement on "bleuit" son ucDay parent

    Après vous pourrez attaquer Gdi+ qui offre d'autres perspectives.

  12. #12
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 506
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 506
    Points : 20 792
    Points
    20 792
    Par défaut
    Citation Envoyé par Patrick-06 Voir le message
    Mais lorsque je l'appelle, il m'est demandé des arguments.
    Je ne sais que faire, peut être pouvez vous m'éclairer ?
    C'est en bonne voie
    Mettre le formulaire en "form design" bref en conception, dans le panneau oropriétés sélectionner l'ïcone "événements" et choisir "paint"
    Visual Studio va générer une ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     private void Form1_Paint(object sender, PaintEventArgs e)
    Simplement entre les lignes rajouter DessinRectangle et le rectangle s'affiche bien
    Pour changer la couleur oui utiliser des pinceaux bref "brushes"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     private void Form1_Paint(object sender, PaintEventArgs e)
    {
        DessinRectangle(e.Graphics);
    }
    Ensuite pour sélectionner les rectangles sur click,
    récupérer les coordonnées du click
    faire une boucle X et une boucle Y.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private void Form1_Click(object sender, EventArgs e)
    {
    int offset_triangle=100;
    for(int X=0; X<10;X++)
    {
    // calculer si click X et Y est inscrit dans rectangle]
    }
    }
    une fois que vous avez cliqué dans le bon rectangle on peut changer la couleur

  13. #13
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 506
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 506
    Points : 20 792
    Points
    20 792
    Par défaut
    j'ai crée un petit projet il affiche 10 cases par 10 cases de 50 pixels.
    Reste plus que le code pour gérer le click à faire.
    Fichiers attachés Fichiers attachés

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2013
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Merci beaucoup chrismonoye et Mat.M,

    Je vais étudier tout cela, mais seulement dans 2 à 4 jours, car j'ai une commande de peinture à l'huile personnalisée à honorer. (Je suis artiste peintre)

    Je vous dis donc à bientôt.

    Et mille mercis à tous pour votre aide !

  15. #15
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 506
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 506
    Points : 20 792
    Points
    20 792
    Par défaut
    salut Patrick avec plaisir si ça peut aider...ne pas hésiter à me demander de l'aider

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 417
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 417
    Points : 2 075
    Points
    2 075
    Par défaut
    Citation Envoyé par Patrick-06 Voir le message
    Merci umfred pour ce code, mais je n'ai pas pu le mettre en oeuvre.
    le "in" et le "Parent" sont soulignés en rouge. " in attendu " " Parent n'est pas un membre de sendrer "
    Comme dit je n'avais pas testé, et j'ai mélangé un peu de C# avec du vb.net
    Les corrections de chrismonoye devrait résoudre les soucis

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2013
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Bonjour tout le monde, me revoilà,

    Oui, le code proposé par crismonoye fonctionne bien.

    Maintenant, j'aimerais que lorsque on clique une date, toutes les dates antérieures soient désactivées.

    J'ai fait ce code, mais seule la date cliquée est dédactivée.
    (En relisant, je vois que cela ne peux pas marcher, il faudrait déjà récupérer la valeur de le date cliquée)

    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
           private void panel1_Click(object sender, EventArgs e)
           {
     
                   Panel Pnl = (Panel)sender;
                   ucDay uc = (ucDay)Pnl.Parent;
     
               foreach (ucDay ucd in uc.Parent!.Controls)
               {
     
                   ucd.BackColor = Color.White;
                   if (ucd == uc)
                   {
                       ucd.BackColor = Color.LightBlue;
     
     
                   }
                   // Récupère la date du jour
                   string dtoday = DateTime.Now.ToString("d");
                   //Découpe la date du jour pour isoler le jour
                   string[] dtj = dtoday.Split('/');
                   // Convertit en int la date du jour et le label du jour
                   int dtji = Convert.ToInt32(dtj[0]);
                   int dtmi = Convert.ToInt32(label1.Text);
     
                       //Cela ne fonctionne pas, seule la date cliquée est désactivée
                       for (dtmi = 1; dtmi < dtji; dtmi++) { uc.Enabled = false; }
    Mat.M ,

    J'arrive à dessiner le rectangle, mais "calculer si click X et Y est inscrit dans rectangle" est trop difficile pour moi, pour l'instant.

  18. #18
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 506
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 506
    Points : 20 792
    Points
    20 792
    Par défaut
    Citation Envoyé par Patrick-06 Voir le message
    J'arrive à dessiner le rectangle, mais "calculer si click X et Y est inscrit dans rectangle" est trop difficile pour moi, pour l'instant.
    salut je vous laisse chercher un peu par vous-même

  19. #19
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 417
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 417
    Points : 2 075
    Points
    2 075
    Par défaut
    Dans le code que tu nous montres, pour moi il manque la fermeture du 1er foreach, qui ne sert qu'à réinitialiser l'état.. C'est après cette boucle, que tu agis sur la date cliquée elle même.

    Tu peux fournir ton projet?

  20. #20
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 684
    Points : 1 190
    Points
    1 190
    Par défaut
    bonsoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                       //Cela ne fonctionne pas, seule la date cliquée est désactivée
                       for (dtmi = 1; dtmi < dtji; dtmi++) { uc.Enabled = false; }
    oui, c'est normal.
    uc est un objet bien précis. Il est en imagé "la case cliquée". Donc uc, la case cliquée est bien désactivée.
    Par contre vous le demandez de 1 à la date du jour, soit 9 fois aujourd'hui et vous mettez ce code dans le Foreach.
    Donc c'est exécuté 9*31 fois (31 jours en décembre).

    (En relisant, je vois que cela ne peux pas marcher, il faudrait déjà récupérer la valeur de le date cliquée)
    avec uc toujours, vous pouvez l'obtenir, je pense :
    Si ça marche, il faudra placer ce code après l'assignation du uc et avant le Foreach, pour ne faire qu'un appel.
    Ensuite dans le foreach, itou, vous demandez le jour de ucd en cours.
    Enfin avec une condition, si jour_ucd est < à jour_uc alors ucd est désactivée.
    C'est comme cela que je vois votre demande.

Discussions similaires

  1. probleme avec les couleurs du TDBChart
    Par tchimou dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/05/2007, 15h33
  2. jouer avec les couleur des lignes de diplaytable
    Par fouyou dans le forum Struts 1
    Réponses: 1
    Dernier message: 24/04/2007, 11h01
  3. Problème avec les animations de mon personnage
    Par Stnaire dans le forum SDL
    Réponses: 1
    Dernier message: 27/11/2006, 21h59
  4. [VB.NET 1.1] Remplir une liste avec les couleurs d'un brush
    Par malhivertman1 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/11/2006, 13h23
  5. VLC - Problème avec les couleurs
    Par Franck.H dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 24/10/2006, 15h54

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