2009-07-05 4 views
10

Comment créer un contrôle Onglet avec un nombre dynamique d'onglets dans Visual Studio C#?Création d'un contrôle Onglet avec un nombre dynamique d'onglets dans Visual Studio C#

J'ai une base de données avec une table customers. J'ai besoin de créer un formulaire qui montrerait les onglets avec les premières lettres du nom de famille des clients (seules les premières lettres, pour lesquelles il y a des entrées dans le tableau, devraient être présentes). Chaque onglet doit contenir un contrôle DataGrid avec les clients correspondants. Je me connecte à la base de données en utilisant DataSet.

Où dois-je insérer l'extrait de code qui générerait de tels onglets? Puis-je le faire avec le contrôle de tabulation existant ou devrais-je créer un contrôle personnalisé?

Répondre

16

Vous pouvez générer des onglets dynamiques avec le TabControl existant. Voici un exemple de la façon dont cela peut être fait sous une sorte de pseudo-code ...

TabControl tabControl = new TabControl(); 
tabControl.Dock = DockStyle.Fill; 

foreach (Char c in lastNameList) 
{ 
    TabPage tabPage = new TabPage(); 
    tabPage.Text = c.ToString(); 

    DataGrid grid = new DataGrid(); 

    grid.Dock = DockStyle.Fill; 
    grid.DataSource = dataForTheCurrentLoop; 

    tabPage.Controls.Add(grid); 
    tabControl.Controls.Add(tabPage); 
} 

this.Controls.Add(tabControl); 
0

Il semble que la meilleure solution pour vous serait de créer votre propre classe de contrôle de tabulation personnalisée. Il pourrait hériter du contrôle des onglets pour l'essentiel de ses fonctionnalités et de ses propriétés pour la grille de données et toute autre custom dont vous avez besoin. Ensuite, lorsque vous obtenez vos clients, vous pouvez créer un onglet pour chaque lettre dont vous avez besoin et configurer les propriétés correspondantes.

2

Vous devez ajouter le code pour générer les onglets où vous déterminez quelles lettres doivent être affichées, probablement lorsque vous récupérez les données ou dans la méthode OnLoad() du formulaire. Vous devriez pouvoir ajouter/supprimer dynamiquement des onglets du contrôle de tabulation intégré. Vous pouvez vérifier le code du concepteur pour savoir comment le faire, ou les docs.

Notez que ce n'est pas forcément une bonne idée d'ajouter un onglet distinct pour chaque caractère. 26 onglets (ce qui arrivera quand votre base de données devient raisonnablement grande) est un nombre assez impressionnant d'onglets pour que quelqu'un puisse y jeter un coup d'œil - cela ne rendra pas nécessairement les choses plus rapides du tout. Au lieu de cela, envisagez de fournir un mécanisme de filtrage dynamique, similaire au champ de recherche du menu Démarrer de Vista. Votre utilisateur peut taper un seul caractère (en supposant que vous n'écrivez pas une sorte de kiosque ou un logiciel à écran tactile seulement) et zoomer immédiatement sur les noms pertinents. Cela fonctionnerait idéalement avec un ListView en mode Liste ou Détails.

1

Je ne me souviens pas des détails maintenant. Mais il suffit de regarder le code dans le fichier XXX.designer.cs pour un formulaire que vous avez qui contient un contrôle de tabulation. Là, vous verrez le code généré pour ajouter un nouvel onglet. Il suffit de répliquer ces lignes, vous pouvez ajouter un nouvel onglet quand vous le souhaitez.

Questions connexes