Bonjour,
Toujours pour m'exercer dans mon apprentissage sur les classes, je me suis donné comme exercice la création d'un textbox personnalisé avec une bordure lorsque le contrôle prend le focus.
J'ia donc besoin de l'event OnGotFocus pour déclencher l'événement.
Mais pour dessiner le rectangle correspondant à la bordure, je n'ai pas trouvé d'autre moyen que d'utiliser l'event OnPaint.
Le pb est d'appeler le OnPaint depuis l'event OnGotFocus.
Voici le code :
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 Imports System.ComponentModel Public Class CustomTextBox Inherits System.Windows.Forms.TextBox Private _GotFocus As Boolean Private _BorderColor As Color = Color.Red Private _BorderWidth As SByte = 1 <Browsable(True), Category("Apparence")> _ Public Property BorderColor() As Color Get Return _BorderColor End Get Set(ByVal value As Color) _BorderColor = value End Set End Property <Browsable(True), Category("Apparence")> _ Public Property BorderWidth() As SByte Get Return _BorderWidth End Get Set(ByVal value As SByte) _BorderWidth = value End Set End Property Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) MyBase.OnPaint(e) MyBase.BorderStyle = Windows.Forms.BorderStyle.FixedSingle If _GotFocus Then Dim mypen As Pen mypen = New Pen(_BorderColor, _BorderWidth) e.Graphics.DrawRectangle(mypen, _BorderWidth, _BorderWidth, Me.Width - 2 * _BorderWidth, Me.Height - 2 * _BorderWidth) End If End Sub Protected Overrides Sub OnGotFocus(ByVal e As System.EventArgs) MyBase.OnGotFocus(e) _GotFocus = True '... ici : comment appeler OnPaint ??? End Sub Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs) MyBase.OnLostFocus(e) _GotFocus = False End Sub End Class
D'abord : La "philosophie" est-elle la bonne ?
Si oui, comment appeler la procédure OnPaint depuis OnGotFocus.
J'espère que cet exemple est aussi simple que je l'imagine, sinon merci de me le dire, je passerais à un exercice plus facile !!
Partager