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 ??
Version imprimable
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 ??
Salut,
Un bon petit IsEnabled setté à false sur ton TabItem ne fonctionne pas ?
salut
T'as pas essayé :
TheMonzPourraitAvoiruneRéponse = true ? :)
Allez, regardes ici !!!
Lalahitou
The Monz, Toulouse
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 8O
3- Helas ca ne fait rien :
J'ai essayé
Ca ne l'émeut point ! :pleure:Code:tabCtrl.TabPages[0].IsAccessible=false;
Juste une question, ton tabcontrol est celui WinForm ou un tabpanel d'ajax?
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...
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:
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; } }
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
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:
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; }
Merci pour cette explication TheMonz :king:
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 !?
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.
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 :aie:
Yep !Citation:
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.
Tu a raison
Et c'est meme pas mal si on veut montrer pour regarder mais sans toucher !!
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:
1
2
3
4
5
6
7
8 bool navAllowed = false; private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e) { if (!navAllowed) e.Cancel = true; }
salut,
pour éviter la selection d'un TabPage, j'ai utilisé ce genre de méthodes :
Code:this.tabControlProjets.Selected += new TabControlEventHandler(this.tabControlProjets_Selected);
ca permet d'annuler la sélection des onglets qui ne doivent pas l'être.Code:
1
2
3
4
5
6 private void tabControlProjets_Selecting(object sender, TabControlCancelEventArgs e) { if( tabControlProjets.SelectedIndex == 1 ) { tabControlProjets.DeselectTab(1); } }
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
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é ....
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
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.
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 :)