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 :

Forcer les majuscules dans une cellule d'un Datagrid


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 14
    Points
    14
    Par défaut Forcer les majuscules dans une cellule d'un Datagrid
    Salut tout le monde,
    Tout d'abord, je dois vous dire que je suis un nouveau développeur VB.NET. Donc, mes connaissances sont très limitées!

    Je fais de la maintenance sur une application préallablement développée et j'ai un Datagrid dans cette application. Je désire que lorsque l'utilisateur est en mode saisie dans une des cellules de mon Datagrid, tout ce qu'il y inscrit soit automatiquement converti en majuscule.

    Comment dois-je m'y prendre?

  2. #2
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour Jean.

    Je ne suis pas pro du datagrid, mais il me semble que tu dois créer un handler pour attraper l'événement KeyPress sur la colonne pour arriver à tes fins.

    Pour ce faire, il faut lorsque le control se créé pour une colonne (evt : ControlAdded) créer un Handler sur ce control pour le KeyPress.
    Dans la gestion de cet evt, tu peux gérer la mise en majuscule de la lettre tapée.

    C'est pas clair, donc vite fait (i.e. à remanier car je suis parti du principe que cela concernait les colonnes de type Textbox), je te poste un exemple plus parlant :

    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
     
    Public Class Form2
     
        Private Sub Form2_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
     
            Dim strSqlquery As String = _
                "SELECT * FROM Matable"
            Dim ad As New OleDb.OleDbDataAdapter(New OleDb.OleDbCommand(strSqlquery, Cnn))
            Dim ds As New DataSet
     
            ad.Fill(ds)
     
            Me.DataGrid1.DataSource = ds
        End Sub
     
        Private Sub DataGrid1_ControlAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.ControlEventArgs) Handles DataGrid1.ControlAdded
            If TypeOf e.Control Is DataGridTextBox Then
                AddHandler e.Control.KeyPress, _
                New KeyPressEventHandler(AddressOf Control_KeyPress)
            End If
        End Sub
        Private Sub Control_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
            e.KeyChar = UCase(e.KeyChar)
        End Sub
     
    End Class

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Merci bien pour ces informations.
    le problème c'est que le KeyChar est une propriété ReadOnly. Je ne peux donc pas la transformer en majuscule... Y-aurait-il une autre façon d'intercepter les caractères et te les transformer en majuscule??

  4. #4
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Je suis trés étonné car cela fonctionne avec le framework 2.0 ou le Keychar est définit ainsi :

    Public Property KeyChar() As Char
    Membre de*: System.Windows.Forms.KeyPressEventArgs
    Résumé*:
    Obtient ou définit le caractère correspondant à la touche activée.

    Valeurs de retour*:
    Caractère ASCII composé. Par exemple, si l'utilisateur appuie sur les touches MAJ*+*K, cette propriété retourne la lettre K en majuscule.

    Tu es en 1.1 ?

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    En effet...
    Donc voilà d'où viendrait le problème...

    Je vais continuer de chercher. Si quelqu'un a des idées, merci de m'en faire part!

  6. #6
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Re.

    Essaye un peu ça :

    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
     
    Public Class Form2
     
        Public intNbFrappe As Integer = 0
    ...
        Private Sub Control_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
            intNbFrappe = intNbFrappe + 1
            If intNbFrappe = 2 Then
                intNbFrappe = 0
                Exit Sub
            End If
            e.Handled = True
            SendKeys.Send(UCase(e.KeyChar))
     
        End Sub
    End Class
    Ca marche chez moi mais je trouve ça un peu moyen !

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Il ne se passe rien quand j'ajoute cet événement à ma classe...
    Lorsque j'écris un caractère rien n'affiche et le premier caractère que j'inscris fait planter l'application au SendKeys.send...

    Quelle est l'utilité première du SendKeys?

  8. #8
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Re

    As-tu gardé les codes initial que j'avais posté ? (notamment le AddHandler ...)

    Le sendkey sert a simuler une entrée clavier par code.
    Avec e.Handled = True, j'inhibe la prise en compte du caractère saisi
    Et avec SendKeys.Send(UCase(e.KeyChar)) je renvoie le caractère en majuscule.

    voici l'intégralité du code qui marche chez moi :

    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
     
    Option Strict Off
    Public Class Form2
     
        Public intNbFrappe As Integer = 0
     
        Private Sub Form2_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
     
            Dim strSqlquery As String = _
                "SELECT ..."
            Dim ad As New OleDb.OleDbDataAdapter(New OleDb.OleDbCommand(strSqlquery, Cnn))
            Dim ds As New DataSet
     
            ad.Fill(ds)
     
            Me.DataGrid1.DataSource = ds
        End Sub
     
        Private Sub DataGrid1_ControlAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.ControlEventArgs) Handles DataGrid1.ControlAdded
            If TypeOf e.Control Is DataGridTextBox Then
                AddHandler e.Control.KeyPress, _
                New KeyPressEventHandler(AddressOf Control_KeyPress)
            End If
        End Sub
        Private Sub Control_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
            'e.KeyChar = UCase(e.KeyChar)
            intNbFrappe = intNbFrappe + 1
            If intNbFrappe = 2 Then
                intNbFrappe = 0
                Exit Sub
            End If
            e.Handled = True
            SendKeys.Send(UCase(e.KeyChar))
     
        End Sub
     
    End Class
    Si cela ne marche pas je n'ai pas de solution (ou passer en framework 2.0 mais à mon avis tu aimerais bien si tu pouvais ;-) )

Discussions similaires

  1. Forcer les majuscules dans une cellule
    Par Warthill dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/12/2013, 13h30
  2. Réponses: 0
    Dernier message: 19/11/2008, 16h38
  3. controler les saisies dans une cellule
    Par lecaire dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/05/2008, 19h14
  4. comment en VBA mettre les mots dans une cellule en oblique
    Par antoine.dandois dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/02/2007, 17h10
  5. ne veut pas d'espaces entre les images dans une cellule
    Par cortex024 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 07/12/2006, 15h30

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