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 :

Inactiver un tab de tabcontrol


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Inactiver un tab de tabcontrol
    Bonjour

    J'essaye de trouver un moyen de rendre inactif un tab dans un tabcontrol
    Mais je ne trouve rien
    Ca m'etonne un peu

    - Soit un Enabled=False
    - Soit un Visible=False
    - Un ReadOnly=true;
    - ToucheMoiPasVasVoirAilleurs=true;
    - Ou que sais-je ??

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 89
    Par défaut
    Salut,

    Un bon petit IsEnabled setté à false sur ton TabItem ne fonctionne pas ?

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    T'as pas essayé :

    TheMonzPourraitAvoiruneRéponse = true ?

    Allez, regardes ici !!!

    Lalahitou

    The Monz, Toulouse

  4. #4
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bien essayé

    J'ai eu un moment d'espoir

    Mais :
    1- IsEnabled n'existe pas
    2- Par contre grace a ta suggestion, j'ai trouvé IsAccessible
    3- Helas ca ne fait rien :

    J'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabCtrl.TabPages[0].IsAccessible=false;
    Ca ne l'émeut point !

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Par défaut
    Juste une question, ton tabcontrol est celui WinForm ou un tabpanel d'ajax?

  6. #6
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    La propriété Enabled desactive bien les controls à l'intérieur du tabPage concerné, mais pas la navigation des onglets.

    Je ne crois pas que cela soit prévu.

    Sinon, tu peux toujours essayé d'avoir une gestion (attention aux instances) ou tu supprimes l'onglet que tu ne veux pas activer...

  7. #7
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut a tous

    Pour Arasium : WinForm
    Pour KelBonPlan : Il n'y a pas d'enabled pour un tabPages

    Pour TheMonz : je venais de trouver cette explication mais sur base de cette idée, j'ai fait mieux (je pense)

    1- Il faut mettre les Flags IsAccessible
    2- Ensuite j'intercepte dans SelectedIndexChanged
    3- J'ai pas encore trouvé comment connaitre proprement le previous index

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        private void tabctrl_Def_SelectedIndexChanged(object sender, EventArgs e)
        {
          if (tabctrl_Def.SelectedTab.IsAccessible == false)
          {
            previousIndex=1;
            tabctrl_Def.SelectedIndex = previousIndex;
          }
        }

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    pour le "previousIndex", si tu es sur l'onglet 0 (1) au démarrage, tu initialises ton previousIndex avec cette valeur

    Ensuite, dans le changement d'index (que tu trappes d'ailleurs), il te suffit de mettre à jour cette valeur là (en fonction bien sur du comportement que tu dois avoir (ie : tu mets à jour la valeur que quand tu changes d'onglet autorisé )

    The Monz, Toulouse

  9. #9
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Citation Envoyé par olibara Voir le message
    Pour KelBonPlan : Il n'y a pas d'enabled pour un tabPages
    Tiens, je suis un veinard, dans mon composant, moi j'ai le droit à une propriété Enabled...

    Sinon ton idée est pas mal (bien que la propriété IsAccessible ne soit pas prévu pour ça, normalement...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private int Int_PreviousIndex = -1; 
    private void TabControl1_SelectedIndexChanged(object sender, System.EventArgs e) 
    { 
     
        if (TabControl1.SelectedIndex.IsAccessible == false) { 
            TabControl1.SelectedTab = TabControl1.TabPages(Int_PreviousIndex); 
        } 
     
        Int_PreviousIndex = TabControl1.SelectedIndex; 
     
    }

  10. #10
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci pour cette explication TheMonz

    C'est justement ce bricouli que je voulais eviter ! ....

    J'esperais pourvoir trouver la valeur de ce previousIndex dans les propriétés de l'event ou du control !?

  11. #11
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut BonKelPlan ?

    (excuse moi je suis d'humeur lutine aujoud'hui)

    Enabled de ton composant OUI ! : moi aussi je l'ai.

    Mais c'est pas l'enabled du composant qui m'intéresse mais celui d'une page ...

    Pour le previousIndex : meme réponse que pour TheMonz.

  12. #12
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Je me permets d'insister ...

    Le composant TabControl comprte bien une propriété Enabled : là on est d'accord.

    Même si la propriété n'est pas accessible au niveau du designer, le composant TabPage comporte lui aussi une propriété Enabled. Si si !!

    TabPage étant un objet qui hérite de control, elle hérite obligatoirement de la propriété Enabled.

    theMonz31 m'a grillé, j'avais pas vu

  13. #13
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Même si la propriété n'est pas accessible au niveau du designer, le composant TabPage comporte lui aussi une propriété Enabled. Si si !!
    TabPage étant un objet qui hérite de control, elle hérite obligatoirement de la propriété Enabled.
    Yep !
    Tu a raison

    Et c'est meme pas mal si on veut montrer pour regarder mais sans toucher !!

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    Bonsoir,

    J'ai voulu faire exactement la même chose il y a peu, il n'y a effectivement pas de propriété Enabled (malheureusement).

    Au début j'étais parti dans une solution du type de celle décrite ci-dessus (resélectionner la TabPage précédente en cas de sélection de la mauvaise TabPage), l'inconvénient étant l'effet de flickering résultant de cette manip.

    Finalement je me sert de l'évènement "Deselecting" du TabControl, qui dispose de la propriété "Cancel". On peut s'en servir pour bloquer tout les onglets par défaut, modulo une variable (que tu peux gérer en fonction de la tabpage courante par exemple).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    bool navAllowed = false;
     
    private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e)
    {
           if (!navAllowed) e.Cancel = true;
    }

  15. #15
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    salut,

    pour éviter la selection d'un TabPage, j'ai utilisé ce genre de méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.tabControlProjets.Selected += new TabControlEventHandler(this.tabControlProjets_Selected);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
          private void tabControlProjets_Selecting(object sender, TabControlCancelEventArgs e)
          {
             if( tabControlProjets.SelectedIndex == 1 ) {
                tabControlProjets.DeselectTab(1);
             }
          }
    ca permet d'annuler la sélection des onglets qui ne doivent pas l'être.

  16. #16
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    au final, je pense que le "plus propre", serait de faire un userControl qui hérite
    du TabControl et qui propose un tel comportement !

    De plus, ça serait bien que lorsqu'un onglet est "non utilisable", il soit indiqué
    comme "grisé" au niveau du rendu visuel !

    The Monz, Toulouse

  17. #17
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    Ouis

    Mais finalement la remarque de Kelplan est pertinente

    La propriété Enable existe, bien que cachée
    Si on l'active, le tab reste visible mais tout ses controls son disablé : ce qui est une solution asser élégante pour beaucoup d'usage, sauf si on veut vraiment cacher tout a l'utilisateur

    Dans ce cas ta proposition est la bonne

    Mais je trouve un peu idiot que les concepteurs de ce control n'ont pas pensé a ca alors que tout est la pour le faire !
    ca fait penser a un chantier abandonné ....

  18. #18
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    je ne dirais pas "chantier" abandonné mais plutot, on s'appuie sur un composant existant déja avec .Net et on se "contente" de le wrapper en .Net plutot que de "tout" ré-écrire parce que cela prendra un peu de temps


    C'est toute la problématique des composants microsofts qui doivent etre utilisable par tous, dans "pleins" de langages, contextes, etc...

    D'ou parfois l'interet d'utiliser des composants tiers parfois plus approprié car moins globaux, généralistes et contraints en terme d'OS et d'évolutivité

    The Monz, Toulouse

  19. #19
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Une solution consite à créér un ArrayList avec tous les TabPage, puis à chaque fois qu'on veut rendre Visible/invisible des tabsheet, on enleve tous les TabPage du TabControl et on remet depuis l'ArrayList les seuls TabPage visibles.

  20. #20
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par olibara Voir le message
    Mais je trouve un peu idiot que les concepteurs de ce control n'ont pas pensé a ca alors que tout est la pour le faire !
    ca fait penser a un chantier abandonné ....
    Je dirais plutôt que ça fait partie de la "charte ergonomique" de windows.

    Parce que j'ai beau fouiller ma mémoire, dans toutes les applis que j'ai vues, j'ai pas souvenir d'un tabPage désactivé. Par contre, d'un TabControl ayant un nombre de tabPage variable selon le contexte, oui

Discussions similaires

  1. TabControl sans Tab
    Par nico_4802 dans le forum Windows Forms
    Réponses: 17
    Dernier message: 13/11/2007, 16h43
  2. Problème Ordre des Tab dans un TabControl VB.Net
    Par yenissay1 dans le forum Windows Forms
    Réponses: 14
    Dernier message: 30/05/2007, 22h31
  3. [VB.NET] Touche Tab et tabcontrol
    Par olbi dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/09/2006, 11h37
  4. Gérer le ALT-TAB ?
    Par Magus (Dave) dans le forum DirectX
    Réponses: 15
    Dernier message: 04/01/2004, 00h43
  5. OnKeyDown avec TAB et SHIFT TAB
    Par StarMusic dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/12/2003, 12h21

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