none
Ajouter un curseur dans un DataGridView control RRS feed

  • Question

  • Bonjour Groupe,

    Dans mon projet, je crée une calculatrice en utilisant un contrôle DataGridView.

    Toutes les touches clavier sont interceptées pour me permettre de décider de ce qui se passera avec chaque touche. Les propriétés du contrôle ont été fixées pour qu'il ne soit pas possible d'éditer directement une cellule. Ceci a pour conséquence que le curseur n'est plus visible dans la cellule courante. Ceci n'empêche pas mon application de fonctionner mais c'est assez intimidant et peu convivial pour l'utilisateur qui ne voit pas ou apparaîtra son prochain chiffre.

    Est-il possible d'écrire du code (API Windows?) pour ajouter moi-même un curseur visible?

    Merci pour toute aide!

     

    mardi 19 octobre 2010 14:18

Toutes les réponses

  • Bonjour,

    Est-ce que ceci donnerait quelque chose ?

    System.Windows.Forms.Cursor.Show()
    

    Et pour la calculatrice il y a ceci par exemple :

    Dim r
    r = Shell("calc.exe", 1)
    

    Cordialement.

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mardi 19 octobre 2010 15:17
  • Bonjour,

     

    Quelles sont les propriétés que vous avez modifiées pour empêcher l’édition directement dans le contrôle DataGridView ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    mercredi 20 octobre 2010 11:57
  • Bonjour EhJoe,

    Merci  d'avoir pris le temps de me répondre.

    La solution proposée ne donne aucun résultat, ce qui ne m'étonne pas. Le curseur est géré par le contrôle DataGridView selon ma compréhension. C'est pourquoi je veux court-circuiter le contrôle et demander à Windows de dessiner un curseur par l'API Windows.

    Quant à calc.exe, je connais cette application. Elle ne me convient pas pour ce que je veux faire.

    Amicalement.

    Guy Lafrenière

    mercredi 20 octobre 2010 15:19
  • Bonjour Alex,

    Voici les valeurs des propriétés du contrôle DataGridView:

    EditMode = EditProgrammatically
    Enabled = True
    Locked = False
    ReadOnly = False

    J'ai essayé toutes les valeurs possibles pour la propriété EditMode, sans succès.

    Merci pour ton aide.

    mercredi 20 octobre 2010 15:22
  •  

    Bonjour,

     

    Au lieu d’essayer avec des fonctions API, je vous conseille d’intercepter l’évènement lancé à l’introduction d’un nouveau caractère dans la cellule, et de traiter ce caractère. Vous devez modifier la propriété EditMode à son valeur originale.

     

    Pour intercepter cet évènement, utilisez ce code :

     

            private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

            {

                if (dataGridView1.CurrentCell.ColumnIndex == 1)

                {

     

                    TextBox tb = (TextBox)e.Control;

     

                    tb.TextChanged += new EventHandler(tb_TextChanged);

     

                }

     

            }   

     

    void tb_TextChanged(object sender, EventArgs e)

            {

     

                Console.WriteLine("changed");

     

            }

     

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    jeudi 21 octobre 2010 11:28
  • Bonjour Alex,

    Pourriez-vous réécrire le code en VB 2005 SVP.

    Je ne comprend pas la ligne ' textbox tb = (textbox)e.control '. Peut-être que je comprendrai mieux avec du code que je connais.

    L'événement TextChanged est-il essentiel ou est-ce seulement un témoin pour constater un résultat?

    Merci!

     

    Guy Lafrenière

    jeudi 21 octobre 2010 15:42
  • Bonjour,

     

    Voici le code VB.NET :

    Private Sub dataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs)
         If dataGridView1.CurrentCell.ColumnIndex = 1 Then
              Dim tb As TextBox = DirectCast(e.Control, TextBox)         tb.TextChanged += New EventHandler(tb_TextChanged)
         End If
    End Sub
    Private Sub tb_TextChanged(sender As Object, e As EventArgs)
         Console.WriteLine("changed")
    End Sub
    

     

     

    Pour des conversions C#/VB.NET je vous recommande cet outil :

    http://converter.telerik.com/

     

    Dans la méthode tb_TextChanged vous pouvez vérifier le texte modifié, car cette méthode est appelée avec chaque nouveau caractère introduit par l’utilisateur.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     
    Suivez MSDN sur Twitter 

    lundi 25 octobre 2010 14:25
  • Bonjour Alex,

    Voici le code que j'ai écris en me basant sur ton code :

        Private Sub dgvRuban_EditingControlShowing(ByVal sender As Object, _
                             ByVal e As DataGridViewEditingControlShowingEventArgs) _
                             Handles dgvRuban.EditingControlShowing

            If dgvRuban.CurrentCell.ColumnIndex = 1 Then
                Dim tb As TextBox = DirectCast(e.Control, TextBox)
                tb.TextChanged += New EventHandler(tb_TextChanged)
            End If

        End Sub

        Private Sub tb_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
            Console.WriteLine("changed")
        End Sub


    Voici les erreurs que j'obtiens :

    Erreur 1 'Public Event TextChanged(sender As Object, e As System.EventArgs)' est un événement. Il ne peut donc pas être appelé directement. Utilisez une instruction 'RaiseEvent' pour déclencher un événement.

    Erreur 2 'System.EventHandler' est un type délégué et il requiert une seule expression 'addressof' en tant qu'unique argument du constructeur.

    Merci pour ton aide!


    Guy Lafrenière


    lundi 25 octobre 2010 19:59
  • Bonjour,

     

    Remplacez la ligne

    tb.TextChanged += …

    avec :

    AddHandler tb.TextChanged, AddressOf tb_TextChanged

     

     

    Désolé, apparemment cet outil de conversion n’est pas assez efficace que je le croyais J et je n’ai pas vérifié le code après la conversion.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    • Proposé comme réponse EhJoe mardi 26 octobre 2010 08:36
    mardi 26 octobre 2010 08:08
  • Bonjour,

     

    Est-ce que maintenant la solution fonctionne ? Cette approche vous convient ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    jeudi 28 octobre 2010 08:51
  • Bonjour Alex,

    Voici mon code actuel :

        Private Sub dgvRuban_EditingControlShowing(ByVal sender As Object, _
                                                   ByVal e As DataViewEditingngControlShowingEventArgs) _
                                                   Handles dgvRuban.EditingControlShowing

            If dgvRuban.CurrentCell.ColumnIndex = 1 Then
                Dim tb As TextBox = DirectCast(e.Control, TextBox)
                AddHandler tb.TextChanged, AddressOf tb_TextChanged
            End If

        End Sub

        Private Sub tb_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
            Console.WriteLine("changed")
        End Sub

    Ce code ne fonctionne pas. Aucun curseur n'apparaît.

    J'ai mis une fonction MsgBox au début de la procédure d'événement dgvRuban_EditingControlShowing et je constate que la procédure ne s'exécute pas, comme si l'événement n'était pas détecté. Toutes les touches de mon programme sont capturées par un événement KeyDown au niveau de la form. Est-ce la cause?

    Merci!


    Guy Lafrenière

    jeudi 28 octobre 2010 13:59
  • Bonjour,

     

    Essayez de supprimer l’interception de l’évènement au niveau de la form, ou essayez cette solution dans un nouveau projet, pour mieux comprendre la logique.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    jeudi 28 octobre 2010 14:01
  • Bonjour Alex,

    Merci pour la réponse.

    Je vais tenter votre suggestion quand j'aurai du temps.

     

    Guy Lafrenière

    vendredi 29 octobre 2010 13:48