Tabcontrol + Questions

Résolu
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 21 juil. 2005 à 10:09
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 21 juil. 2005 à 17:36
Bonjour à tous,



Quelqun serait t'il par hazard comment faire clignoter un onglet d'un
tab control et comment afficher aussi une image sur les onglets ?



Par avance, merci.

6 réponses

cs_OxN Messages postés 24 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 10 août 2007 1
21 juil. 2005 à 15:26
Pour l'image sur les onglets, tu rajoutes d'abord une imagList dans les propriétés de ton tabcontrol, et apres, dans la collections de tes tabPages, t'as un ImageIndex, tu choisi a partir de là, l'image que tu souhaites de ta ImageList

OxN
1
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
21 juil. 2005 à 17:34
Salut emmanuel,

Je pense avoir la solution :

// Timer permettant de faire clignoter le TabPage
private Timer _tabPageClippingTimer;

// Variable indiquant si le TabPage en clignotement est allumé
private bool _isClipping;

// Indice du TabPage en train de clignoté
private int _tabPageIndex;

// Au chargement du formulaire
private void FormLoad( object sender, System.EventArgs e )
{

// Initialise le timer
_tabPageClippingTimer = new Timer();
_tabPageClippingTimer.Interval = 250;
_tabPageClippingTimer.Tick += new EventHandler( TabPageClipping );

// Intercepte l'événement généré lorsqu'un TabPage doit être dessiné
tabControl.DrawMode = TabDrawMode.OwnerDrawFixed;
tabControl.DrawItem += new DrawItemEventHandler( DrawTabControlItem );
}

// Débutte un clignottement
// tabPageIndex -> indice du TabPage à faire clignoter
private void StartTabPageClipping( int tabPageIndex )
{
_tabPageIndex = tabPageIndex;
_tabPageClippingTimer.Start();
}

// Met fin au clignottement
private void StopTabPageClipping()
{
_isClipping = false;
_tabPageClippingTimer.Stop();
tabControl.Invalidate( true );
}

// Le tabPage doit clignoter
private void TabPageClipping( object sender, EventArgs e )
{

// Le TabPage est allumé
if( _isClipping )
{

// Eteind le TabPage
_isClipping = false;
tabControl.Invalidate( true );
}

else
{

// Allume le TabPage
_isClipping = true;
tabControl.Invalidate( true );
}
}

// Un TabPage doit être redessiné
private void DrawTabControlItem( object sender, System.Windows.Forms.DrawItemEventArgs e )
{

// Pinceau du fond du texte
Brush backBrush;

// Pinceau du texte
Brush foreBrush;

// Il s'agit du TabPage à faire clignoté et le TabPage est allumé
if( _isClipping && _tabPageIndex == e.Index )
{
backBrush = new Pen( Color.Red ).Brush;
foreBrush = new Pen( Color.Yellow ).Brush;
}

else
{
backBrush = new Pen( SystemColors.Control ).Brush;
foreBrush = new Pen( Color.Black ).Brush;
}

// Dessine le fond du TabPage
e.Graphics.FillRectangle( backBrush, e.Bounds );

// Récupère le texte du TabPage à dessiner
string tabPageText = tabControl.TabPages[ e.Index ].Text;

// Récupère les dimensions du texte
SizeF stringSize = e.Graphics.MeasureString( tabPageText, tabControl.Font );

// Récupère l'image
Image tabPageImage = null;

if( tabControl.TabPages[ e.Index ].ImageIndex != -1 && tabControl.ImageList.Images.Count > tabControl.TabPages[ e.Index ].ImageIndex )
tabPageImage = tabControl.ImageList.Images[ tabControl.TabPages[ e.Index ].ImageIndex ];

// Calcul la position du texte
int stringLeft = (int)( e.Bounds.Left + ( e.Bounds.Width - ( tabPageImage != null ? tabPageImage.Width : 0 ) - stringSize.Width ) / 2 );
int stringTop = (int)( e.Bounds.Top + ( e.Bounds.Height - ( tabPageImage != null ? tabPageImage.Height : 0 ) - stringSize.Height ) / 2 );

// dessine le texte deux pixel plus bas s'il n'est pas sélectionné
if( tabControl.SelectedIndex != e.Index )
stringTop += 2;


// Dessine l'image
if( tabControl.TabPages[ e.Index ].ImageIndex != -1 && tabControl.ImageList.Images.Count > tabControl.TabPages[ e.Index ].ImageIndex )
e.Graphics.DrawImage( tabPageImage, e.Bounds.Left, e.Bounds.Top );

// Dessine le texte
e.Graphics.DrawString( tabPageText, tabControl.Font, foreBrush, stringLeft, stringTop );
}

Sauf que chez moi, l'image list est vide, alors que j'y ait mis 3 images ?!?
Dis-moi si c'est OK !!!
1
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
21 juil. 2005 à 15:42
merci de ton aide et pour le clignotement tu sais pas si y'a pas moyen avec ondraw ?
0
cs_OxN Messages postés 24 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 10 août 2007 1
21 juil. 2005 à 15:48
Tu veux un clignotement.. mais... quand un onglet est séléctionné? qu'il clignote?

OxN
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
21 juil. 2005 à 15:51
En faite faut que je puisse décider quand ça commence à clignoter sur
l'onglet que j'ai choisi et quand l'utilisateur clique sur l'onglet qui
clignote le clignotement s'eteint un peut comme avec msn.
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
21 juil. 2005 à 17:36
merci bcp !
0
Rejoignez-nous