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 :

Probleme avec plus de 50 composants dans une form


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Points : 19
    Points
    19
    Par défaut Probleme avec plus de 50 composants dans une form
    Voilà j'ai une fenetre qui contient plus de 50 labels.

    J'aimerais que quand je clique sur l'un le label change de couleurs.

    Mais je ne me vois pas faire un évenement pour chaque label.

    J'ai pensé à une boucle mais je vois pas comment faire.

    Est ce que quelqun aurait une idée voilà un exemple de fenetre avec moins de label.

    Merci
    Images attachées Images attachées  

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Points : 17
    Points
    17
    Par défaut reponse
    Pour moi le mieux dans ce genre de cas c'est de faire une classe (MyLabel) qui herite de Label et dans laquelle tu met ton changement de couleur de fond dans l'evenement click.

    Dans ta form ou il y a les 50 labels tu met des "MyLabel" à la place des "Label", pour ca il faut que tu les instancient dans le code et non par l'interface graphique (mais j'imagine que c'est déjà ce que tu fait...)

    Voila si c'est pas clair n'hesite pas ...

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Salut,

    Tout d'abord merci.

    Je vois un peu ce que tu veux dire mais tu pourrais me donner un exemple de classe héritée stp pour bouton?

    J'ai cherché un peu et j'ai pu instancier une boucle. Pour placefr mes boutons.

    En fait j'ai changé c'est des bouttons.

    Mais c'est laz meme.

    Mais c'est apres je vois pas comment faire pour dire quand je clique sur bouton1 et non sur le deux.

    Tiens voilà mon 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    private void createButtonInterface()
    		{
    			ArrayList buttons = new ArrayList();
     
    			int i=0;
    			for(i=0;i<28;i++)
    			{
    				buttons.Insert(i,new Button());
    			}
    			i=0;
    			int j=0;
    			int k=0;
    			foreach(Button b in buttons)
    			{
    				int x =72;
    				int y = 40;
    				if(i==4)
    				{
    					j++;
    					i=0;
    				}
     
    				if(j>=2&&j<5)
    				{
    					y=57;
    				}
     
    				if(j>=5)
    				{
    					y=75;
    				}
     
    				b.Size = new System.Drawing.Size(45, 37);
    				System.Drawing.Point placeBoutton =new System.Drawing.Point(x+i*58,y+40*j);		
     
    				b.Location = placeBoutton;
    				b.Name = "first" + k;
    				this.groupBox1.Controls.Add(b);
    				i++;
    				k++;
     
     
     
    			}
    		}

    Et là comment faire pour instancier les clics je vois pas.
    Images attachées Images attachées  

  4. #4
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Tous tes labels doivent pointent sur le même event handler. Là, tu as le sender et tu peux savoir sur lequel tu as cliqué.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    button1.Click += ...;
    button2.Click += ...;
    Donc dans ta boucle, tu feras
    Ils pointeront tous sur le même event. Là tu as dans les paramètres "object sender" que tu pourras utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Button b = (Button)sender;
    b.BackColor = Color.Red;

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


  5. #5
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Finalement j'ai réfléchi de la facon suivante.

    J'ai créé un controle boutton personnalisé.

    Avec dedans les attributs.

    Voilà ma classe controle


    Et puis du coup dans ma boucle ca change en cette instance:

    private void createButtonInterface()
    {
    ArrayList buttons = new ArrayList();
    string[] tab = new string[8];

    tab[0]="G";
    tab[1]="F";
    tab[2]="E";
    tab[3]="D";
    tab[4]="C";
    tab[5]="B";
    tab[6]="A";

    int i=0;
    for(i=0;i<28;i++)
    {
    buttons.Insert(i,new seatComponent());
    }
    i=0;
    int j=0;
    int k=0;
    foreach( seatComponent b in buttons)
    {
    int x =72;
    int y = 40;
    if(i==4)
    {
    j++;
    i=0;
    }

    if(j>=2&&j<5)
    {
    y=57;
    }

    if(j>=5)
    {
    y=75;
    }
    b.Size = new System.Drawing.Size(45, 37);
    //b.Image=Image.FromFile("");
    System.Drawing.Point placeBoutton =new System.Drawing.Point(x+i*58,y+40*j);
    b.Text=tab[j]+i.ToString();
    b.Location = placeBoutton;
    b.Name =tab[j]+i.ToString();
    // b.Click += new System.EventHandler(b.Name+"_click");
    this.groupBox1.Controls.Add(b);
    i++;
    k++;

    }
    }


    Mais ca ne fonctionne pas.

    Normalement vu que dans mon arraylist je ne crée pas de button mais un seatcomponent et qu'à chaque boutton de ce type est affecté l'évenement click.

    Mais ca ne fonctionne pas. Je ne comprends pas.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Désolé je remets bien le code

    Alors code de ma boucle:

    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
     
    private void createButtonInterface()
    		{
    			ArrayList buttons = new ArrayList();
    			string[] tab = new string[8];
     
    			tab[0]="G";
    			tab[1]="F";
    			tab[2]="E";
    			tab[3]="D";
    			tab[4]="C";
    			tab[5]="B";
    			tab[6]="A";
     
    		int i=0;
    			for(i=0;i<28;i++)
    			{
    				buttons.Insert(i,new seatComponent());
    			}
    			i=0;
    			int j=0;
    			int k=0;
    			foreach( seatComponent b in buttons)
    			{
    				int x =72;
    				int y = 40;
    				if(i==4)
    				{
    					j++;
    					i=0;
    				}
     
    				if(j>=2&&j<5)
    				{
    					y=57;
    				}
     
    				if(j>=5)
    				{
    					y=75;
    				}
    				b.Size = new System.Drawing.Size(45, 37);
    				//b.Image=Image.FromFile("");
    				System.Drawing.Point placeBoutton =new System.Drawing.Point(x+i*58,y+40*j);		
    				b.Text=tab[j]+i.ToString();		
    				b.Location = placeBoutton;
    				b.Name =tab[j]+i.ToString();
    			//	b.Click += new System.EventHandler(b.Name+"_click");
    				this.groupBox1.Controls.Add(b);
    				i++;
    				k++;
     
    			}
    		}
    Et code de mon controle personnalisé bouton

    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
     
    using System;
    using System.Windows.Forms;
     
    namespace WindowsApplication6
    {
    	/// <summary>
    	/// Description résumée de buttons.
    	/// </summary>
    	public class seatComponent:System.Windows.Forms.Button
    	{
    		private System.Windows.Forms.Button button1;
     
    		int i=0;
     
    		public void InitializeComponent()
    		{ 
    			this.button1=new Button();
    			this.button1.Click+=new EventHandler(button1_Click);
    			this.button1.ForeColor = System.Drawing.Color.Red;
    		}
     
    		public seatComponent()
    		{
    			InitializeComponent();
    		}
     
    		private void button1_Click(object sender, System.EventArgs e)
    		{  MessageBox.Show(this.button1.Text);
    			if(button1.ForeColor==System.Drawing.Color.Red)
    			{
    				button1.ForeColor=System.Drawing.Color.Green;
    			}
     
    			else if(button1.ForeColor==System.Drawing.Color.Green)
    			{
    				button1.ForeColor=System.Drawing.Color.Yellow;
    			}
     
    			else if(button1.ForeColor==System.Drawing.Color.Yellow)
    			{
    				button1.ForeColor=System.Drawing.Color.Blue;
    			}
     
    			else if(button1.ForeColor==System.Drawing.Color.Blue)
    			{
    				button1.ForeColor=System.Drawing.Color.Red;
    			}
    		}
     
     
    	}
    }

  7. #7
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Tu créés une instance de bouton dans un composant bouton que tu n'affiche même pas. Normale qu'il ne detecte pas de click.
    Ton composant est déjà le bouton... C'est à lui qu'il faut définir le handle de récupération du click

    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
     
    using System;
    using System.Windows.Forms;
     
    namespace WindowsApplication6
    {
        /// <summary>
        /// Description résumée de buttons.
        /// </summary>
        public class seatComponent:System.Windows.Forms.Button
        {
            public void InitializeComponent()
            { 
                this.Click+=new EventHandler(button1_Click);
                this.ForeColor = System.Drawing.Color.Red;
            }
     
            public seatComponent()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, System.EventArgs e)
            {   
                if(this.ForeColor==System.Drawing.Color.Red)
                {
                    this.ForeColor=System.Drawing.Color.Green;
                }
     
                else if(this.ForeColor==System.Drawing.Color.Green)
                {
                    this.ForeColor=System.Drawing.Color.Yellow;
                }
     
                else if(this.ForeColor==System.Drawing.Color.Yellow)
                {
                    this.ForeColor=System.Drawing.Color.Blue;
                }
     
                else if(this.ForeColor==System.Drawing.Color.Blue)
                {
                    this.ForeColor=System.Drawing.Color.Red;
                }
            }
        }
    }

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Points : 270
    Points
    270
    Par défaut
    Salut,

    J'ai pas tout compris je suis donc peut-être hors sujet....

    Dans un formulaire, j'ai des combobox avec à côté un bouton me permettant:
    soit d'ouvrir un formulaire afin d'ajouter une entrée
    soit de vider la sélection de la liste.
    Pour guider l'utilisateur je modifie l'icone. J'ai codé ceci:
    Code VB.net : 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
     
    Private Sub CheckCboBt()
     
            'Nom des Combobox   =>  cboNom
            'Nom des boutons    =>  cmdAjomodNom
            ' Rechercher dans le formulaire les Combobox, lorsque l'on en trouve une,
            ' Rechercher dans le formulaire les Button, lorsque l'on en trouve un,
            ' Vérifier que la fin de leurs noms sont égaux (autrement rechercher un autre bouton), lorsqu'ils sont égaux
            ' Vérifier si la liste contient du texte,
            '   Si elle est vide, mettre btAjouter en image du bouton
            '   Si elle est contient du texte, mettre btRetour en image du bouton
     
            ' Faire le tour des contrôles du "Groupe Complémentaire"
            For Each CheckCbo As Control In Me.grpbxComplementaire.Controls
     
                ' Si le contrôle courant de la boucle est une Combobox
                If TypeOf CheckCbo Is ComboBox Then
     
                    ' Faire le tour des contrôles du "Groupe Complémentaire"
                    For Each CheckBt As Control In Me.grpbxComplementaire.Controls
     
                        ' Si le contrôle courant de la boucle est une Textbox
                        If TypeOf CheckBt Is Button Then
     
                            ' Récupération de la fin du nom de la liste
                            Dim NomCb As String
                            NomCb = CheckCbo.Name.Remove(0, 3)
     
                            ' Récupération de la fin du nom du bouton
                            Dim NomBt As String
                            NomBt = CheckBt.Name.Remove(0, 9)
     
                            ' Vérifier s'ils sont égaux
                            If NomBt.ToUpper = NomCb.ToUpper Then
     
                                ' Vérifier si la liste contient du texte
                                If CheckCbo.Text = "" Then
     
                                    CType(CheckBt, Button).Image = Global.Parc_Véhicule.My.Resources.Resources.btAjouter
     
                                Else
     
                                    CType(CheckBt, Button).Image = Global.Parc_Véhicule.My.Resources.Resources.btRetour
     
                                End If
     
                            End If
     
                        End If
     
                    Next CheckBt
     
                End If
     
            Next CheckCbo
     
        End Sub

    Voilà si sa peut t'aider...

    Gwendal

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

Discussions similaires

  1. Ajuster des composants dans une Form en plein écran
    Par jalalnet dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/06/2011, 10h15
  2. probleme avec l'affichage des images dans une jsp
    Par hypothese dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 27/05/2008, 16h56
  3. Centrer des composants dans une form?
    Par alg_dev dans le forum Delphi
    Réponses: 1
    Dernier message: 10/06/2007, 10h24
  4. [C#][VS2005] centrer composants dans une form
    Par camilero dans le forum Windows Forms
    Réponses: 10
    Dernier message: 06/07/2006, 11h48

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