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

VB.NET Discussion :

CustomTextBox avec borderColor [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut CustomTextBox avec borderColor
    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 !!

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 267
    Par défaut
    bonjour, as-tu essayer ceci :

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    ça ne peut pas marcher : le e de GotFocus est de type EventArgs tandis que celui de OnPaint est de type PaintEventArgs

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 267
    Par défaut
    ok, essaye ceci :

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonsoir,

    appel Me.Invalidate() pour repeindre le composant.

    http://msdn.microsoft.com/fr-fr/libr...(v=vs.90).aspx

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Bonsoir,

    appel Me.Invalidate() pour repeindre le composant.
    à quel endroit ?

    ok, essaye ceci :


    Marche pas, il faut un argument de type PaintEventArgs

    ...

    De toute façon, j'ai fait un test : la procédure OnPaint n'est jamais lue. Donc avant de savoir comment passer de OnGotFocus à OnPaint, il faudrait déjà comprendre comment aller dans OnPaint. Le code suivant, qui aurait pour effet de tracer une bordure rouge, indépendamment de tout événement, ne marche donc pas :

    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
    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 = 3
     
     
        <Browsable(True), Category("Apparence")> _
        Public Property BorderColor() As Color
            Get
                Return _BorderColor
            End Get
            Set(ByVal value As Color)
                _BorderColor = value
                Me.Invalidate()
            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
                Me.Invalidate()
            End Set
        End Property
     
     
     
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
     
            MyBase.BorderStyle = Windows.Forms.BorderStyle.FixedSingle
            Dim mypen As Pen
            mypen = New Pen(_BorderColor, _BorderWidth)
            e.Graphics.DrawRectangle(mypen, e.ClipRectangle)
        End Sub
    End Class

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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