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 !!