On a vu précédemment dans TabControl and TabPage Visible que l'on rencontre rapidement de petits soucis. Voici donc un exemple de code source de manipulation rapide des TabPages dans un TabControl.
Requirements :
Visual Studio 2010
Langage C#
Gestion des TabPages dans un TabControl
Un TabControl permet de gérer une collection de TabPages. Pour ajouter une TabPage, on se rend sur la Form principale et l'on sélectionne le TabControl :
Gestion des TabPages d'un TabControl |
Propriétés TabPages du TabControl |
En cliquant sur le bouton on obtient une fenêtre de gestion des TabPages :
Gérer la collection de TabPages dans un TabControl |
Gestion rapide des TabPages d'un TabControl - TabControl Tasks |
TabControl code source
La propriété TabPages du TabControl est une collection TabPageCollection et se gère comme telle, d'où le code pour changer l'ordre des TabPages :
private void buttonChangerOrdre_Click(object sender, EventArgs e)
{
tabControlMain.SuspendLayout();
tabControlMain.TabPages.Clear();
tabControlMain.TabPages.Add(tabPage3);
tabControlMain.TabPages.Add(tabPage2);
tabControlMain.TabPages.Add(tabPage1);
tabControlMain.ResumeLayout();
}
Sur un ordinateur rapide les fonctions SuspendLayout et ResumeLayout ne changent pas grand chose pour moi il y a encore quelques "sursauts graphiques".
Pour passer programmatiquement d'un TabPage à l'autre :
private void afficherTabPage2()
{
tabPage1.Hide();
tabPage2.Show();
tabControlMain.SelectedIndex = 1;
}
Pensez à sélectionner le bon index.
TabControl redimensionnement de la fenêtre principale
Le redimensionnement des contrôles dans les TabPages lors du changement de taille de la fenêtre principale Form1 est assuré par les deux fonctions :
private void Form1_ResizeBegin( object sender, EventArgs e )
{
// Sauver les données de taille et de place au départ du déplacement
}
Et :
private void Form1_ResizeEnd( object sender, EventArgs e )
{
// Calculer les nouvelles places et taille à la fin du déplacement
}
TabPage mauvais redimensionnement lors du Resize de la page
Problème rencontré : Lors du déploiement de cet exemple sur une plateforme Windows XP et lors du redimensionnement de la fenêtre principale voici le résultat :
TabControl problème lors de Resize de la fenêtre principale |
Solution
C'est problèmes d'incompatibilité des composants standards multiplateforme windows sont assez délicats pour que l'on prenne le temps de s'y attarder. Ils engendrent souvent un délais non maîtrisable supplémentaire lors du développement. On ne les découvre souvent que trop tard une fois le client mécontent.
Il faut effectuer un Refresh du TabPage actif de la façon suivante :
private void Form1_ResizeEnd( object sender, EventArgs e )
{
tabControlMain.TabPages[tabControlMain.SelectedIndex].Refresh();
}
Download Source Code
Have fun !
Aucun commentaire:
Enregistrer un commentaire