Affichage des articles dont le libellé est TabPage. Afficher tous les articles
Affichage des articles dont le libellé est TabPage. Afficher tous les articles

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 !



mercredi 18 septembre 2013

TabControl and TabPage visible

Je travaille actuellement avec un TabContol et Visual Studio 2008 en C# et je veux programmatiquement changer de TabPage. Je suis très surpris par ce que je trouve sur ce sujet sur Internet :

http://www.thejoyofcode.com/Show_and_Hide_tab_pages_in_Windows_Forms.aspx
Là on me raconte que plein de gens disent que c'est impossible que de toutes les façons les méthodes Show() et Hide() de l'objet TabPage n'ont aucune action ! Joy of Code part ensuite dans des considérations hallucinantes avec du code pour gérer la collection de TabPage de mon TabControl :
// "hides" tab page 2
_tabControl.TabPages.Remove(_tabPage2);

// "shows" tab page 2
if (_tabControl.TabPages.Contains(_tabPage2))
{
    _tabControl.TabPages.Add(_tabPage2);
}

Il fait encore plus fort avec ce genre de code :
// Suspend and resume layout to avoid flickering.
_tabControl.SuspendLayout();
_tabControl.TabPages.Clear();
_tabControl.TabPages.Add(_tabPage1);
_tabControl.TabPages.Add(_tabPage2);
_tabControl.ResumeLayout();

Bref en plus cela ne fonctionne pas et ce n'est pas ce que l'on veut !

http://stackoverflow.com/questions/552579/how-to-hide-tabpage-from-tabcontrol
Ici également on nous dit que cela n'est pas possible ...avec WinForms 2.0.

Bref je perds mon temps et les choses ont dues être corrigées depuis car le code est tout simple.

Solution pour changer de TabPage dans un TabControl

Ayant pris soin de nommer mon TabControl : tabControlMain
Et dans la collection de TabPages j'ai deux TabPage : tabPage1 et tabPage2 voici le code :

private void buttonShowTabPage1_Click( object sender, EventArgs e )
{
tabPage2.Hide();
tabPage1.Show();

tabControlMain.SelectedIndex = 0;
}

private void buttonShowTabPage2_Click( object sender, EventArgs e )
{
tabPage1.Hide();
tabPage2.Show();

tabControlMain.SelectedIndex = 1;
}

C'est tout simple finalement, non ?

Have fun !