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 :

Copier des controles sur une autre page d'un tabpage


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut Copier des controles sur une autre page d'un tabpage
    Bonjour,
    J'ai un tabPage avec des controles (textBox, label, comboBox, richTextBox) et leurs méthodes associées sur la tabpage1, je veux copier par code tous ces controles sur tabpage2
    Quand j'implémente:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            foreach (Control c in tabPage1.Controls)
                {
                    Object c2 = c;
                   tabPage2.Controls.Add((Control)c2); 
                }
    Il me déplace la moitié environ des controles sur la tabpage2 , dénudant à moitié la tabpage1, au lieu de tous les copier. Pourquoi?

  2. #2
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    En fait, lorsque tu fais
    tu ne "dupliques" pas l'objet, mais tu copies sa référence, et donc lorsque tu ajoutes cette références comme contrôle de TabPage2, tu déplaces l'objet. Puisqu'un contrôle ne peut avoir qu'un seul parent.

    Pour le reste, pourquoi veux-tu faire ce genre de manipulation ?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut suite
    J'ai un tabpage avec 12 pages (tabpage0,tabpage1...etc).
    La tabpage0 contient une dizaine de controles, pareil pour les autres, je ne voulais pas en installer 120 manuellement...
    Jaurais pu mettre une form1, et 12 fois Formi=new Form() mais je voulais les onglets.
    1)Comment fait-on pour dupliquer un objet, et pas seulement sa référence?
    2)Pourquoi seulement une partie des controles a été transférée de tappage0 à tabpage1

  4. #4
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    En fait, si toutes les pages comportes les mêmes contrôles, le plus simple et de créer un UserControl qui correspond au contenu de ce que tu souhaites mettre dans ta Tabpage, puis d'ajouter ce UserControl aux différentes pages.

    1) S'il implémente l'interface ICloneable, il faut appeler la méthode Clone(), sinon, il faut créer un nouvel objet du même type, et copier les valeurs à la main (en faisant attention aux propriétés qui sont elle-mêmes des références !)

    2) C'est difficile à dire sans voir le code pour chercher l'explication..

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut suite
    J'ai essayé Clone() mais même avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (c is TextBox) c2=c.Clone()
    il envoie un message d'erreur à la compilation

  6. #6
    Membre confirmé
    Femme Profil pro
    Etudiante en Développement
    Inscrit en
    Avril 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante en Développement
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 106
    Par défaut
    Je suis de l'avis de Pongten, mais si tu veux vraiment dupliquer tous tes controles; on peut essayer quelque chose du genre :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    foreach (Control c in tabPage1.Controls)
    {
        Type t = c.GetType();
        object _control = Activator.CreateInstance(t);
     
        foreach (PropertyInfo pi in c.GetType().GetProperties())
        {
            _control.GetType().GetProperty(pi.Name).SetValue(_control, pi.GetValue(c, null), null);
        }
        tabPage2.Controls.Add(_control);
     }

    Je n'ai pas testé, je ne suis pas sûre que le GetValue et SetValue fonctionnent pour les controles

Discussions similaires

  1. trier et copier des données sur une autre feuille excel
    Par mirage37 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/07/2012, 17h08
  2. ajouter des controles sur une autre form
    Par kineton dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/10/2009, 10h32
  3. Excel-copier des lignes sur une autre feuille
    Par petecul dans le forum Excel
    Réponses: 7
    Dernier message: 13/09/2007, 02h56
  4. Réponses: 2
    Dernier message: 28/11/2006, 15h20
  5. [C#2.0]Dupliquer des controles sur une autre form
    Par chnew dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/05/2006, 09h05

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