IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.NET] Modifier le background d'un TabControl


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut [VB.NET] Modifier le background d'un TabControl
    Bonjour,

    Où puis-je trouver svp la chronologie complète des évènements dotnet ?

    Et autre question, comment puis-je coloriser différement chaque TabPage d'un TabControl (Onglet compris) ?

    Merci bcp pour vos réponses

    Ludo

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut Re: [VB.NET] Chronologie des évènements
    Citation Envoyé par exclusif
    Où puis-je trouver svp la chronologie complète des évènements dotnet ?
    pour quel composant svp :
    Citation Envoyé par exclusif
    Et autre question, comment puis-je coloriser différemment chaque TabPage d'un TabControl (Onglet compris) ?
    En utilisant GDI+ et l'objet System.Drawing.Graphics notamment

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    merci bcp pour les reponses.

    Concernant la chronologie des évènements c'est surtout pour une form et une treeview.

    Débutant en langage vb.net (moins de 50 lignes de code), peux tu m'expliquer ou me donner un exemple de code pour utiliser gdi+ afin de colorer un TabPage ?

    Merci d'avance

    Ludo

  4. #4
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Voici une entrée de la doc MSDN pour comprendre la chronologie de certains evenement des derivés de la classe Control :
    Événement Control
    le premier étant donc Enter

    Dans un premier temps concernant GDI+, je prefère que tu lises un peu en fouillant dans cette entrée MSDN tout ce qui te permettra de te familiariser avec ses classes et membres
    Dans un second temps tu seras donc mieux disposer à ce que je pourrai te montrer comme code
    Utilisation des classes managées GDI+
    ok

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    super je te remercie bcp )

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut Coloration des Onglet d'un TabControl
    bonjour,

    je n'arrive toujours pas à colorer les onglets d'un TabControl :'(

    Même après avoir lu tout ce qu'il faut savoir sur le GDI+.

    Personne n'a la solution svp ???

    Merci

    Ludo

  7. #7
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    il y en a de nombreuses donc faut que tu me precises ton cahier des charges
    1. Est-ce provoqué par une action utilisateur
    2. Est-ce un nouveau TabControl qui te permettrait d'exposer un nouveau type de propriété
    3. Quelles couleurs, quels TabPages ??,
    Enfin va-y décris moi de façon très très détaillé, utilises l'email da,s mon profil si ta doc est longue à decrire, je te donnerai une marche à suivre avec exemple ici

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    Ben en fait j'ai un TabControl qui se compose de 4 onglets bien définis et je voudrais que chaque TapPage (ainsi que l'onglet) soit d'une couleur bien définie et fixe (genre un onglet bleu, un rouge, un vert et un jaune) et ce dès le chargement de mon formulaire et jusqu'à la fermeture de celui-ci.

    C'est cool de bien vouloir m'aider

    Ludo

  9. #9
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    ok et le ForeColor du texte il est de quel couleur :

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    je le laisse noir le forecolor, par contre concernant les couleurs je voudrais des couleurs pastels.

  11. #11
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Bon au pif je te mets le texte en noir pour tous les onglets, tu adapteras par toi même
    Donc le principe est de developpé ton propre TabControl : MyTabControl afin d'implementer le Delegate DrawItem
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Imports System
    Imports System.Drawing
    Imports System.Windows.Forms
     
    Public Class MyTabControl
      Inherits TabControl
      '...
      Private Sub MyTabControl_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles MyBase.DrawItem
        'declarer les brosses pour peindre le fond et le texte
        Dim backBrush As SolidBrush
        Dim foreBrush As SolidBrush
        'recuperer le rectangleF de l'onglet avec la marge
        Dim rF As RectangleF = New RectangleF(e.Bounds.X, e.Bounds.Y + Me.Padding.Y, e.Bounds.Width, e.Bounds.Height - Me.Padding.Y)
        'instancier un format de texte
        Dim strF As New System.Drawing.StringFormat()
        'formater l'alignement du texte
        strF.Alignment = StringAlignment.Center
        ' selon l'index du TabPage en cours d'être dessiné
        ' instancier la brosse pour la couleur de fond
        Select Case e.Index
          Case 0: backBrush = New SolidBrush(Color.Blue)
          Case 1: backBrush = New SolidBrush(Color.Red)
          Case 2: backBrush = New SolidBrush(Color.Green)
          Case 3: backBrush = New SolidBrush(Color.Yellow)
          Case Else: backBrush = New SolidBrush(Me.BackColor)
        End Select
        'instancier la brosse pour le texte
        foreBrush = New SolidBrush(Color.Black)
        'peindre le fond de l'onglet
        e.Graphics.FillRectangle(backBrush, e.Bounds)
        'peindre le texte de l'onglet
        e.Graphics.DrawString(Me.TabPages(e.Index).Text, e.Font, foreBrush, rF, strF)
      End Sub
    End Class

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    Merci bcp Neguib

    Dès que je rentre chez moi je teste tout ça.

    Encore une fois mille mercis !

    Ludo

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    Je viens de tester j'ai donc ajouté une classe à mon projet dans laquelle j'ai collé le code que tu m'as donné. Ensuite je suis allé sur ma form et j'ai ajouté le nouveau composant ainsi créé à partir de la ToolBox. Hélas après compilation je n'ai toujours pas de couleur pour mes onglets :'(

    Où me suis-je trompé ???

  14. #14
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    montre moi le code généré automatiquement dans la Form, notamment la declaration du TabControl et son instanciation dans InitializeComponent

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    Voici le code généré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Form1
        Inherits System.Windows.Forms.Form
     
        'Form overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
            MyBase.Dispose(disposing)
        End Sub
     
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
     
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.MyTabControl1 = New WindowsApplication1.MyTabControl
            Me.TabPage1 = New System.Windows.Forms.TabPage
            Me.TabPage2 = New System.Windows.Forms.TabPage
            Me.TabPage3 = New System.Windows.Forms.TabPage
            Me.TabPage4 = New System.Windows.Forms.TabPage
            Me.MyTabControl1.SuspendLayout()
            Me.SuspendLayout()
            '
            'MyTabControl1
            '
            Me.MyTabControl1.Controls.Add(Me.TabPage1)
            Me.MyTabControl1.Controls.Add(Me.TabPage2)
            Me.MyTabControl1.Controls.Add(Me.TabPage3)
            Me.MyTabControl1.Controls.Add(Me.TabPage4)
            Me.MyTabControl1.Location = New System.Drawing.Point(12, 12)
            Me.MyTabControl1.Name = "MyTabControl1"
            Me.MyTabControl1.SelectedIndex = 0
            Me.MyTabControl1.Size = New System.Drawing.Size(268, 242)
            Me.MyTabControl1.TabIndex = 0
            '
            'TabPage1
            '
            Me.TabPage1.Location = New System.Drawing.Point(4, 22)
            Me.TabPage1.Name = "TabPage1"
            Me.TabPage1.Padding = New System.Windows.Forms.Padding(3)
            Me.TabPage1.Size = New System.Drawing.Size(260, 216)
            Me.TabPage1.TabIndex = 0
            Me.TabPage1.Text = "TabPage1"
            Me.TabPage1.UseVisualStyleBackColor = True
            '
            'TabPage2
            '
            Me.TabPage2.Location = New System.Drawing.Point(4, 22)
            Me.TabPage2.Name = "TabPage2"
            Me.TabPage2.Padding = New System.Windows.Forms.Padding(3)
            Me.TabPage2.Size = New System.Drawing.Size(74, 51)
            Me.TabPage2.TabIndex = 1
            Me.TabPage2.Text = "TabPage2"
            Me.TabPage2.UseVisualStyleBackColor = True
            '
            'TabPage3
            '
            Me.TabPage3.Location = New System.Drawing.Point(4, 22)
            Me.TabPage3.Name = "TabPage3"
            Me.TabPage3.Padding = New System.Windows.Forms.Padding(3)
            Me.TabPage3.Size = New System.Drawing.Size(260, 216)
            Me.TabPage3.TabIndex = 2
            Me.TabPage3.Text = "TabPage3"
            Me.TabPage3.UseVisualStyleBackColor = True
            '
            'TabPage4
            '
            Me.TabPage4.Location = New System.Drawing.Point(4, 22)
            Me.TabPage4.Name = "TabPage4"
            Me.TabPage4.Padding = New System.Windows.Forms.Padding(3)
            Me.TabPage4.Size = New System.Drawing.Size(260, 216)
            Me.TabPage4.TabIndex = 3
            Me.TabPage4.Text = "TabPage4"
            Me.TabPage4.UseVisualStyleBackColor = True
            '
            'Form1
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(292, 266)
            Me.Controls.Add(Me.MyTabControl1)
            Me.Name = "Form1"
            Me.Text = "Form1"
            Me.MyTabControl1.ResumeLayout(False)
            Me.ResumeLayout(False)
     
        End Sub
        Friend WithEvents MyTabControl1 As WindowsApplication1.MyTabControl
        Friend WithEvents TabPage1 As System.Windows.Forms.TabPage
        Friend WithEvents TabPage2 As System.Windows.Forms.TabPage
        Friend WithEvents TabPage3 As System.Windows.Forms.TabPage
        Friend WithEvents TabPage4 As System.Windows.Forms.TabPage
     
    End Class

  16. #16
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    La seule difference avec mon propre test est cette modification de propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.MyTabControl1 .DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed
    ainsi les onglets sont dessinés par la fenêtre parente et non par le systeme d'exploitation
    ajoutes-le et dis-moi :

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    ca fonctionne a merveille !!!

    merci t genial et super cool d'avoir passé du temps sur mon problème avec une telle efficacité en plus !!!!

    Merciiiiiiii !

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    J'ai une dernière question à te poser Neguib. Est-ce possible de colorer les onglets non pas en fonction de leur index mais en fonction de leur Name.

    Je m'explique, je dispose de 4 onglets dont 3 sont cachés au départ. Je les fait apparaitre indépendemment que quand l'utilisateur clique sur un bouton précis et je voudrais que chaque couleur soit donc associée non pas à la position de l'onglet dans MyTabControl mais à son Name. Est-ce possible ou pas ?

    J'ai essayé de modifier la classe MyTabControl que tu m'as créé en vain.

    Merci pour ta reponse.

    Ludo

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 212
    Par défaut
    voici ma modification. Tout fonctionne les couleurs sont bien attribuées à un TabName mais est-ce que tu penses que mon code est correct pas trop compliqué ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
            Select Case e.Index
                Case 0
                    Select Case Form1.MyTabControl1.TabPages(e.Index).Name
                        Case "TabPage1" : backBrush = New SolidBrush(Color.Blue)
                        Case "TabPage2" : backBrush = New SolidBrush(Color.Red)
                        Case "TabPage3" : backBrush = New SolidBrush(Color.Green)
                        Case "TabPage4" : backBrush = New SolidBrush(Color.Yellow)
                        Case Else : backBrush = New SolidBrush(Me.BackColor)
                    End Select
                Case 1
                    Select Case Form1.MyTabControl1.TabPages(e.Index).Name
                        Case "TabPage1" : backBrush = New SolidBrush(Color.Blue)
                        Case "TabPage2" : backBrush = New SolidBrush(Color.Red)
                        Case "TabPage3" : backBrush = New SolidBrush(Color.Green)
                        Case "TabPage4" : backBrush = New SolidBrush(Color.Yellow)
                        Case Else : backBrush = New SolidBrush(Me.BackColor)
                    End Select
                Case 2
                    Select Case Form1.MyTabControl1.TabPages(e.Index).Name
                        Case "TabPage1" : backBrush = New SolidBrush(Color.Blue)
                        Case "TabPage2" : backBrush = New SolidBrush(Color.Red)
                        Case "TabPage3" : backBrush = New SolidBrush(Color.Green)
                        Case "TabPage4" : backBrush = New SolidBrush(Color.Yellow)
                        Case Else : backBrush = New SolidBrush(Me.BackColor)
                    End Select
                Case 3
                    Select Case Form1.MyTabControl1.TabPages(e.Index).Name
                        Case "TabPage1" : backBrush = New SolidBrush(Color.Blue)
                        Case "TabPage2" : backBrush = New SolidBrush(Color.Red)
                        Case "TabPage3" : backBrush = New SolidBrush(Color.Green)
                        Case "TabPage4" : backBrush = New SolidBrush(Color.Yellow)
                        Case Else : backBrush = New SolidBrush(Me.BackColor)
                    End Select
                Case Else
                    backBrush = New SolidBrush(Me.BackColor)
            End Select

  20. #20
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Comme je ne comprends pas trop où tu as mis ce code je prefere partir de la classe MyTabControl, en attendant je te propose d'utiliser la propriété Tag du TabPage, ainsi cela ne dependra ni de l'index ni du nom mais le TabPage indiquera lui même la couleur souhaité (l'ideal étant bien plus tard de developper ta propre classe TabPage qui exposerai une propriété OngletBackColor et une OngletForeColor)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Imports System 
    Imports System.Drawing 
    Imports System.Windows.Forms 
     
    Public Class MyTabControl 
      Inherits TabControl 
      '... 
      Private Sub MyTabControl_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles MyBase.DrawItem 
        Dim backBrush As SolidBrush 
        Dim foreBrush As SolidBrush 
        Dim rF As RectangleF = New RectangleF(e.Bounds.X, e.Bounds.Y + Me.Padding.Y, e.Bounds.Width, e.Bounds.Height - Me.Padding.Y) 
        Dim strF As New System.Drawing.StringFormat() 
        strF.Alignment = StringAlignment.Center 
     
        'recupérer le TabPage en cours
        Dim tb As TabPage = CType(sender, TabControl).TabPages(e.Index)
        'recupérer la couleur dans la propriété Tag du TabPage en cours
        Dim backColor As Color = CType(tb.Tag, Color)
        'si une valeur existe
        If Not IsNothing(backColor) Then : backBrush = New SolidBrush(backColor)
        'sinon definir un backColor par defaut
        Else : backBrush = New SolidBrush(Me.BackColor)
        End IfSelect Case e.Index
     
        foreBrush = New SolidBrush(Color.Black) 
        e.Graphics.FillRectangle(backBrush, e.Bounds) 
        e.Graphics.DrawString(Me.TabPages(e.Index).Text, e.Font, foreBrush, rF, strF) 
      End Sub 
    End Class
    Il ne reste plus qu'à initialiser la propriété Tag de chacun de tes TabPages par une couleur.
    Attention si tu le fais en mode Design, méfies-toi car si tu mets dans la boîte de propriété Tag: Color.Blue c'est transformer en String dans le code generé automatiquement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.MonTabPage.Tag = "Color.Blue"
    Donc à modifier

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VB.NET]Modifier le background d'une MessageBox
    Par informix2006 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/04/2006, 00h37
  2. [.NET]Modifier les variables d'environnement dans...
    Par GusS dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 09/02/2005, 16h25
  3. [MFC] Background D'une TabControl
    Par Muby53 dans le forum MFC
    Réponses: 4
    Dernier message: 13/11/2004, 22h34
  4. [VB.NET] Cache l'onglet d'un TabControl
    Par Lois dans le forum Windows Forms
    Réponses: 14
    Dernier message: 27/10/2004, 09h55
  5. [VB.NET] Couleurs des onglets d'un TabControl
    Par ineznia dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/04/2004, 13h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo