mercredi 2 octobre 2013

TabControl Sample

Qu'elles sont les manipulations de base que l'on doit savoir facilement effectuer avec un TabControl. Voici un exemple de code source. Que se passe t-il lors du redimensionnement de la fenêtre principale ?

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
Dans la fenêtre des propriétés du TabControl on sélectionne la collection de TabPage :

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
Un autre moyen rapide de gestion des TabPages c'est en cliquant sur le petit triangle en haut à droite du TabControl :

Gestion rapide des TabPages d'un TabControl - TabControl Tasks
Voilà c'est tout pour le côté graphique.

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
On remarquera le mauvais redessinement du TabPage en bas.

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