2010-02-05 5 views

Répondre

4

Oui, le composant TabControl fonctionne de cette manière. Tout ce que vous avez à faire est de cacher les onglets. Ajoutez une nouvelle classe à votre projet et collez le code ci-dessous. Compiler. Déposez le nouveau contrôle du haut de la boîte à outils sur votre formulaire. Les onglets sont toujours visibles au moment du design, ce qui facilite l'édition des pages. Mais caché à l'exécution. Utilisez la propriété SelectedTab ou SelectedIndex pour sélectionner la vue.

using System; 
using System.Windows.Forms; 

class ViewStack : TabControl { 
    protected override void WndProc(ref Message m) { 
    // Hide tabs by trapping the TCM_ADJUSTRECT message 
    if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1; 
    else base.WndProc(ref m); 
    } 
} 
+0

Pendant que cela fonctionne, j'ai eu z problèmes de commande lors de la gestion de l'onglet. Pour masquer/afficher les pages, il suffit de modifier l'ordre z de la page visible pour l'amener au sommet. J'ai eu des contrôles enfants visibles même lorsque leur onglet parent n'est pas actif. – Ash

+0

@ash - c'est très inhabituel, peut-être que vous devriez commencer une discussion à ce sujet. –

+0

Belle réponse :) Vraiment utile, mais comment désactiver la navigation entre les onglets pour que tous les composants des onglets fonctionnent correctement? Je ne peux pas retourner true dans 'ProcessCmdKey' car de cette façon même textBox simple ne fonctionnera pas – Misiu

0

Je ne pense pas qu'il existe nativement. Vous devrez probablement jouer avec la propriété Visible.

1

Non, aucun contrôle standard n'offre le même comportement.

Cependant, pour obtenir un comportement similaire, je créerais simplement un nouveau UserControl pour chaque élément de la pile de vues et les ajouterais à un formulaire parent au même emplacement et avec la même largeur/hauteur.

En utilisant une méthode d'aide, il est alors simple de masquer tous les contrôles utilisateur, puis afficher le contrôle spécifique de l'utilisateur en fonction d'un paramètre d'entrée. Le principal avantage de UserControls est que vous pouvez utiliser le concepteur pour créer visuellement chacun des éléments de pile distincts. Un inconvénient possible est que si vous avez plusieurs éléments dans la pile, ou que chaque élément de la pile est complexe, l'utilisation de la mémoire peut devenir assez importante.

+0

Et est-ce (d'une certaine manière) comment, par exemple, la fenêtre d'options dans Visual Studio est créée? C'est ce qui a soulevé ma question. – MysticEarth

+0

Ne sais pas avec certitude, mais il serait probablement utiliser une approche similaire. Une approche encore plus légère pourrait consister à utiliser les contrôles Panel à la place de UserControls, mais cela nécessiterait que chaque panneau soit dynamiquement rempli de contrôles enfants lors de l'exécution. – Ash

Questions connexes