none
Forcer à prendre le TabPages actif RRS feed

  • Question

  • Bonjour,

    Dans mon application windows forms, j’ai un TabControl qui est ajouté dynamiquement. Ce TabControl contient des TabPages qui sont aussi ajoutées dynamiquement. C’est TabPages contiennent chacune un même UserControl ajouté lui aussi dynamiquement. Ce UserControl contient des TextBox, Labels qui sont en Enabled = false.

    Mon application contient un menu avec icônes. Une de ces icônes doit permettre de déverrouiller les TexBox du UserControl contenu dans l’onglet actif.

    Mon problème est que l’icône déverrouille les controls du UserControl du dernier TabPages ajouté au TabControl et non du TabPages actif.

    Alors que si je fais :

    MonTabControl.SelectedTab; => Il me retourne bien le TabPage actif

    Idem si je fais

     ActiveControl = MonTabControl.SelectedTab;

    ActiveControl.Controls.Find("MaTextBox", true); => il me retourne bien true

    J’ai également essayé de donner le focus au TabPages actif comme ceci :

    int index = MonTabControl.SelectedIndex;

    MonTabControl.TabPages[index].Focus();

    Impossible d’accéder aux controles du TabPages actif.

    Même chose si je fais :

    this.MonControl.Enabled = true ;

    Quelqu’un aurait-il une idée pour forcer le this à prendre le TabPages actif  ou tout autre solution pour arriver à ce que je souhaite?

    lundi 28 décembre 2015 15:01

Réponses

  • Bonjour Teodora,

    merci pour votre aide et vos liens.

    J'ai finalement trouvé une solution à mon problème.

    J'ai créé une méthode qui me retourne tous les controls de ma form.

    public IEnumerable<Control> GetSelfAndChildrenRecursive(Control parent) { List<Control> controls = new List<Control>(); foreach (Control child in parent.Controls) { controls.AddRange(GetSelfAndChildrenRecursive(child)); } controls.Add(parent); return controls; }

    Ensuite, j'appelle cette méthode en passant mon tab courant en paramètre. Cette méthode me retourne une collection de controls.

     Control currentControl = tabControl.SelectedTab;
    
                var result = GetSelfAndChildrenRecursive(currentControl);

    Puis je n'ai plus qu'à parcourir cette collection et en fonction du type de control rencontré faire le Enabled = true comme je le voulais.

    foreach (Control c in result)
                {
                    if (c is TextBox || c is DateTimePicker)
                    {
                        c.Enabled = true;
                    }
                }

    Voilà, cela fonctionne parfaitement pour moi. J'espère que cela pourra en aider d'autres.

    Encore merci pour votre aide.

    • Marqué comme réponse paintbox00 vendredi 1 janvier 2016 11:43
    vendredi 1 janvier 2016 11:43

Toutes les réponses

  • Bonjour, paintbox00,

    Veuillez consulter les threads en bas :

    How to access TabPages that are created in real-time?

    Inserer une form dans un onglet de TabControl

    Je vous remercie par avance de votre retour.
    Bonnes fêtes

    Cordialement,
    Teodora


    Votez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 29 décembre 2015 11:04
    Modérateur
  • Bonjour Teodora,

    merci pour votre aide et vos liens.

    J'ai finalement trouvé une solution à mon problème.

    J'ai créé une méthode qui me retourne tous les controls de ma form.

    public IEnumerable<Control> GetSelfAndChildrenRecursive(Control parent) { List<Control> controls = new List<Control>(); foreach (Control child in parent.Controls) { controls.AddRange(GetSelfAndChildrenRecursive(child)); } controls.Add(parent); return controls; }

    Ensuite, j'appelle cette méthode en passant mon tab courant en paramètre. Cette méthode me retourne une collection de controls.

     Control currentControl = tabControl.SelectedTab;
    
                var result = GetSelfAndChildrenRecursive(currentControl);

    Puis je n'ai plus qu'à parcourir cette collection et en fonction du type de control rencontré faire le Enabled = true comme je le voulais.

    foreach (Control c in result)
                {
                    if (c is TextBox || c is DateTimePicker)
                    {
                        c.Enabled = true;
                    }
                }

    Voilà, cela fonctionne parfaitement pour moi. J'espère que cela pourra en aider d'autres.

    Encore merci pour votre aide.

    • Marqué comme réponse paintbox00 vendredi 1 janvier 2016 11:43
    vendredi 1 janvier 2016 11:43
  • Bonjour, paintbox00,

    Je vous remercie d'avoir partagé cette solution avec la communauté du forum.

    Cordialement,
    Teodora


    Votez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 15 janvier 2016 17:10
    Modérateur