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
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
pour quel composant svpEnvoyé par exclusif
:
En utilisant GDI+ et l'objet System.Drawing.Graphics notammentEnvoyé par exclusif
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
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![]()
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
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
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
ok et le ForeColor du texte il est de quel couleur:
je le laisse noir le forecolor, par contre concernant les couleurs je voudrais des couleurs pastels.
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
Merci bcp Neguib
Dès que je rentre chez moi je teste tout ça.
Encore une fois mille mercis !
Ludo
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é ???
montre moi le code généré automatiquement dans la Form, notamment la declaration du TabControl et son instanciation dans InitializeComponent
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
La seule difference avec mon propre test est cette modification de propriété
ainsi les onglets sont dessinés par la fenêtre parente et non par le systeme d'exploitation
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.MyTabControl1 .DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed
ajoutes-le et dis-moi:
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 !
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
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
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)
Il ne reste plus qu'à initialiser la propriété Tag de chacun de tes TabPages par une couleur.
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
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
Donc à modifier
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.MonTabPage.Tag = "Color.Blue"
![]()
Partager