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 :

Evènement Keypress non pris en compte sur certains controls hérités


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Par défaut Evènement Keypress non pris en compte sur certains controls hérités
    Bonjour,
    J'ai créé des controls de type Combobox et textbox dans lesquels je gère certains événements type OnGotFocus, OnLostFocus, OnKeypress etc... Pour une raison que j'ignore, dans ma classe "MyCombobox" l'évènement keypress fonctionne très bien mais, dans la classe MyTexbox, le même évènement ne fonctionne absolument pas.
    Pourquoi ?
    Merci d'avance
    Ci dessous la classe Mycombobox
    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
    Public Class MyComboBox
        Inherits MetroComboBox
        Public Sub New()
            UseCustomBackColor = True
            UseCustomForeColor = True
            BackColor = Color.FromKnownColor(KnownColor.ButtonHighlight)
            ForeColor = Color.Black
            AutoCompleteSource = AutoCompleteSource.ListItems
            AutoCompleteMode = AutoCompleteMode.Suggest
            Height = 16
        End Sub
     
        <Category("2M Management Studio")> <Description("Désactive la molette de la souris")> <DefaultValue(True)>
        Public Property LockMouseWheel As Boolean
        <Category("2M Management Studio")> <Description("Met en surbrillance le control actif")> <DefaultValue(True)>
        Public Property ShowFocus As Boolean
        <Category("2M Management Studio")> <Description("Choix de la Couleur lorsque le contrôle est actif")> <DefaultValue(KnownColor.GrayText)>
        Public Property FocusColor As Color
        <Category("2M Management Studio")> <Description("Autorise index = -1 depuis les touches 'Sup' ou 'Backspace'")> <DefaultValue(True)>
        Public Property NullIndex As Boolean
        Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs)
            If LockMouseWheel = True Then
                Dim mwe As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
                mwe.Handled = True
            End If
        End Sub
        Protected Overrides Sub OnGotFocus(e As EventArgs)
            MyBase.OnGotFocus(e)
            If ShowFocus = True Then
                BackColor = FocusColor
            End If
        End Sub
        Protected Overrides Sub OnLostFocus(e As EventArgs)
            MyBase.OnLostFocus(e)
            If ShowFocus = True Then
                BackColor = Color.FromKnownColor(KnownColor.ButtonHighlight)
            End If
        End Sub
        Protected Overrides Sub OnKeyPress(e As KeyPressEventArgs)
            MyBase.OnKeyPress(e)
            If NullIndex = True Then
                If Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 27 Then
                    SelectedIndex = -1
                End If
            End If
        End Sub
     
    End Class
    et maintenant la classe MyTexbox où l'évènement ontextchanged ne fonctionne pas non plus
    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
    Public Class MyTextbox
        Inherits MetroTextBox
        Public Sub New()
            UseCustomBackColor = True
            UseCustomForeColor = True
            BackColor = Color.FromKnownColor(KnownColor.ButtonHighlight)
            ForeColor = Color.Black
            Height = 23
            Width = 100
            ShowFocus = True
        End Sub
        Private _mesAccKeyChar() As Integer
        Private _Text As String
        Private _parent As Control
     
        <Category("2M Management Studio")> <Description("Met en surbrillance le control actif")> <DefaultValue(True)>
        Public Property ShowFocus As Boolean
        <Category("2M Management Studio")> <Description("Choix de la Couleur lorsque le contrôle est actif")> <DefaultValue(KnownColor.GrayText)>
        Public Property FocusColor As Color
        <Category("2M Management Studio")> <Description("Choix du type de Text (Numérique, Date, texte ou monnaitaire)")> <DefaultValue(TextboxType.IsText)>
        Public Property Type As TextboxType
        <Category("2M Management Studio")> <Description("Choix du nombre de chiffres après la virgule")> <DefaultValue(NbDecimal.Deux)>
        Public Property NbDecimal As NbDecimal
     
     
        Protected Overrides Sub OnKeyPress(e As KeyPressEventArgs)
            MyBase.OnKeyPress(e)
            If Type <> TextboxType.IsText Then
                Select Case Type
                    Case TextboxType.IsDate
                        _mesAccKeyChar = {8, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57}
                    Case Else
                        _mesAccKeyChar = {8, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57}
                End Select
                If Asc(e.KeyChar) = 46 Then e.KeyChar = ","
                If Not _mesAccKeyChar.Contains(Asc(e.KeyChar)) Then
                    e.Handled = True
                Else
                    e.Handled = False
                End If
            End If
        End Sub
        Protected Overrides Sub OnTextChanged(e As EventArgs)
            MyBase.OnTextChanged(e)
            If Type = TextboxType.IsDate Then
                Select Case Text.Length
                    Case 3
                        _Text = Strings.Left(Text, 2)
                        _Text += "/" + Strings.Right(Text, 1)
                        Text = _Text
                        SelectionStart = 4
                    Case 6
                        _Text = Strings.Left(Text, 5)
                        _Text += "/" + Strings.Right(Text, 1)
                        Text = _Text
                        SelectionStart = 7
                    Case 10 'Sortie
                        SendKeys.SendWait("{TAB}")
                End Select
            End If
        End Sub
        Protected Overrides Sub OnGotFocus(e As EventArgs)
            MyBase.OnGotFocus(e)
            If ShowFocus = True Then
                BackColor = FocusColor
            End If
        End Sub
        Protected Overrides Sub OnLostFocus(e As EventArgs)
            MyBase.OnLostFocus(e)
            If ShowFocus = True Then
                BackColor = Color.FromKnownColor(KnownColor.ButtonHighlight)
            End If
        End Sub
     
        Protected Overrides Sub OnValidating(e As CancelEventArgs)
            MyBase.OnValidating(e)
            If Text <> "" And Type <> TextboxType.IsText Then
                Dim Nb As String = NbDecimal.GetHashCode.ToString
                Try
                    Select Case Type
                        Case TextboxType.IsMonnaie
                            Text = Format(CType(Text, Double), "C" & Nb).ToString
                        Case TextboxType.IsDate
                            Text = Format(CType(Text, Double), "d").ToString
                        Case TextboxType.IsNumeric
                            Text = Format(CType(Text, Double), "n" & Nb).ToString
                    End Select
     
                Catch ex As Exception
                    Text = ""
                    Me.Select()
                    SetMainParent()
                    MetroMessageBox.Show(_parent, "Saisie numérique obligatoire...!", "Defaut de Format", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End Try
            End If
        End Sub

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Tu peux dans un premier temps renommer ta property Type en autre chose car Type est considéré comme mot clé réservé en DotNet.

    A suivre...

  3. #3
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Par défaut
    Bonjour,

    Merci pour la remarque, c'est fait....

    Une idée, peut être pour l'évènement?

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Oui j ai une idée, deja je doute fort que TextboxType retourne un boolean...
    Ce qui fait que ta condition type <> TextboxType.istext n est pas vraiment cohérente...

  5. #5
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Par défaut
    Re,
    Alors pour être plus précis voici la définition du "TextboxType"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Namespace My.Controls
        Public Enum TextboxType
            IsText = 0
            IsDate = 1
            IsMonnaie = 2
            IsNumeric = 3
        End Enum
    End Namespace
    Donc clairement non ce n'est pas un booléen et après les modifications dont on a parlé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If TypeDonnee <> TextboxType.IsText Then
                Select Case TypeDonnee
                    Case TextboxType.IsDate 'Etc

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Avec le code supplementaire on y voit plus clair..😉
    As tu mis un point d arret pour voir si tu entres dans ton event keypress ?

Discussions similaires

  1. Aspect curseur souris non pris en compte sur Opéra
    Par Archimède dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/05/2017, 20h27
  2. [Drupal] [Drupal7] Mdofications sur fichier .tpl.php non pris en compte sur OVH
    Par dliverneaux dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 07/11/2012, 16h15
  3. Rewriting non pris en compte sur 1 vhost
    Par Nicolas N. dans le forum Apache
    Réponses: 1
    Dernier message: 25/07/2011, 14h06
  4. Onclick non pris en compte sur une div ( sous IE7)
    Par le_chomeur dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/09/2008, 17h40
  5. Css non pris en compte sur safari 2
    Par orphen dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 28/08/2008, 18h45

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