Comment éffacer réellement un caractère dans la console...

cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 - 14 janv. 2013 à 18:40
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 - 15 janv. 2013 à 13:33
Bonsoir,

J’essaye de créée un système de "AdvancedConsoleInput", c'est à dire une fonction qui n'affichera seulement
que les caractères que j'aurais définie, par exemple si je décide que seule la touche "a", "b" et "c" peuvent
être appuyé et bien si j'appuie sur les autre touche, rien ne se passera, seul les touches "a", "b" et "c"
réagiront !

Quand je tape la touche, le caractère s'affiche dans la console a la position actuel du curseur.
Mais je m'arrache les cheveux pour réellement effacer un caractère quand on appuie sur la touche "BackSpace"

Il faut aussi gérer les flèches du clavier pour déplacer le curseur de la console, se que j'ai réussi a faire.
Bref, je cherche à faire comme un système de "Console.ReadLine" mais avec les caractères que je veux qui s’affiche.

Vous pouvez m'aider Svp ?

Je poste mon code ici histoire de vous faire voir ou j'en suis:
''' <summary>
    ''' Ceci permet de saisir des caractères choisie avec le clavier dans la console, le texte est validé une fois que l'utilisateur a appuyé sur la touche entrée
    ''' </summary>
    ''' Ce paramètre optionnel définie les caractères autorisé qui penvent être tapé au clavier, chaque caractère doit entrée t'elle quel, exemple: abc (seule a, b et c serront accepter)


    ''' <returns>Retourne la ligne de texte taper au clavier une fois que l'utilisateur a valider en appuyent sur la touche entrée</returns>
    ''' <remarks></remarks>
    ''' 
    Public Function AdvencedConsoleInput(Optional ByVal CaractèresAccepter As String = "") As String

        Dim InfoTouche As New ConsoleKeyInfo
        Dim Texte As String = ""
        Dim DepartX = Console.CursorLeft
        Dim DepartY = Console.CursorTop
        Dim Chaine As String = ""
        Dim LongueurChaine As Integer = 0
        Dim Caractère As String = ""

        Do

            InfoTouche = Console.ReadKey(True)

            If InfoTouche.Key = ConsoleKey.Backspace And Console.CursorLeft > 0 Then

                LongueurChaine = Texte.Length - 1

                If LongueurChaine <= 0 Then
                    LongueurChaine = 0
                End If

                Debug.WriteLine(Texte)
                Texte = Texte.Remove(Console.CursorLeft - 1, 1)

                Console.CursorLeft = DepartX
                Console.CursorTop = DepartY

                Console.Write(Texte + " ")
                Console.CursorLeft = Console.CursorLeft - 1

                Debug.WriteLine(Texte)

            ElseIf InfoTouche.Key ConsoleKey.RightArrow Or InfoTouche.Key ConsoleKey.LeftArrow Or InfoTouche.Key = ConsoleKey.UpArrow Or InfoTouche.Key = ConsoleKey.DownArrow Then

                If InfoTouche.Key = ConsoleKey.RightArrow Then
                    If Console.CursorLeft <= Texte.Length - 1 And Console.CursorLeft < Console.BufferWidth - 1 Then
                        Console.CursorLeft = Console.CursorLeft + 1
                    End If

                ElseIf InfoTouche.Key = ConsoleKey.LeftArrow Then
                    If Console.CursorLeft > 0 Then
                        Console.CursorLeft = Console.CursorLeft - 1
                    End If

                ElseIf InfoTouche.Key = ConsoleKey.UpArrow Then

                ElseIf InfoTouche.Key = ConsoleKey.DownArrow Then

                End If

            ElseIf Console.CapsLock = True Then

                If Console.NumberLock = True Then
                    Caractère = GestionNumPad(InfoTouche, Texte)
                    Console.Write(Caractère)
                    Texte += Caractère
                Else
                    Caractère = Chr(InfoTouche.Key)
                    Console.Write(Caractère)
                    Texte += Caractère
                End If

            Else
                Caractère = LCase(GestionNumPad(InfoTouche, Texte))
                Console.Write(Caractère)
                Texte += Caractère
            End If

            Threading.Thread.Sleep(1)

        Loop Until InfoTouche.Key = ConsoleKey.Enter

        Return Texte

    End Function

6 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
14 janv. 2013 à 22:23
Salut

Je poste mon code ici histoire de vous faire voir ou j'en suis:


et où en es tu ?
tu aurais pu écrire un code encore plus spaghetti
avec plus de if else if imbriqué l'un dans l'autre
si tu essaies de commenter ton code
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
14 janv. 2013 à 22:28
Ba je fais avec se que je peux moi hein, c'est un véritable casse tête se truc
0
Utilisateur anonyme
15 janv. 2013 à 03:36
Bonjour,

Moi, ce que j'en dis, c'est qu'il n'y a visiblement aucune méthode ou propriété de la classe Console qui permette de le faire directement. Au pire ou au mieux, selon le point de vue. console.clear efface tout l'écran.

Et puis je me questionne sur la pertinence de faire des acrobaties de même dans la console quand il y a un contrôle Windows Forms du nom de MaskedTextBox est fait spécialement pour cela.

Et, puis, c'est peut-être louable de vouloir apprendre VB.net, mais je me questionne sérieusement si c'est vraiment utile d'obliger les autres à corriger tes "performances".

Et puis, je me demanderais si le rôle principal de Visual Basic, c'est de faire des programmes en ligne de commande. Parce que, si la réponse était oui, le programme ne s'appellerait pas Visual Basic et Microsoft n'aurait sûrement pas inventé PowerShell et ne l'aurait pas ajouté d'Office à Windows.

Et puis, je ferais une petite visite sur cette page, en faisant les adaptations qui s'imposent.

Parce que demander à des gens bénévoles de corriger des exercices futiles, fussent-ils des exploits, pourrait bien finir par empêcher d'autres personnes d'avoir des réponses à des problèmes bien réels.

Clément Marcotte
Amos (Québec) Canada.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
15 janv. 2013 à 10:13
Bonjour,

J'ai lue ton message et une partie du lien sur: http://www.vbfrance.com/forum/sujet-BAR-SUJET-PFE-TP-AUTRES-DEVOIRS-SCOLAIRES_1557761.aspx
Mon but est simplement de m'amuser et de faire les choses qui me passe par la tête, j'aime bien justement innover et me casser la tête
sur des choses qui effectivement sont parfois futile.

Je ne suis pas un étudiant mais simplement un petit programmeur amateur !

Je n'est en aucun cas envie de m'attirer les foudre des gents, et je suis vraiment désoler de recevoir des messages de ce genre-là croyez-le bien
Je finirais simplement par m’excuser de la cause occasionner et dire que je ferais le nécessaire pour m'améliorer.

Cordialement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 janv. 2013 à 10:39
C'est très bien, dayvid et je te félicite de cette approche : développer en t'amusant.
J'en fait rigoureusement autant, dans de nombreux domaines, dont la pêche.
Quand toutefois je pêche, c'est moi, qui pêche, pas le voisin. Et je me garde en plus de tenter de bouffer le temps disponibles des autres pêcheurs pour leur demander de m'aider perfectionner ma "manière" de vouloir pêcher la crevette grise alors que cette pêche ne les intéresse pas du tout, eux ... ni leur apporterait le moindre gain en perfectionnement de leur propre pêche.
Amuse-toi bien.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
15 janv. 2013 à 13:33
C'est pas facile pour moi de bien me tenir sur un forum, et faire se qui faut, j'ai eu pas mal de problème avec ça déjà

Mon orthographe n'est jamais bien, je postes des tonnes de question et code qui ne servent à tien
Je poste des placard de code, bref, je me met tous le monde à dos quoi sans le vouloir !

Je sais, tous le monde s'en fiche et en plus je raconte ma vie comme dabe et ça, les gents ils aimes pas ça !
Bref, en gros si j'ai bien compris, j'ennuie tous le monde avec mes demandes à deux balles...

Pas facile la vie sur un forum...

Bref, merci pour vos remarques qui même si elle me font pas toujours bien plaisir m'aideront je l'éspère à évoluer !
Cordialement.
0
Rejoignez-nous