Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VB.NET] Retour à la ligne textbox et touch entrée

Sujet résolu
    10 novembre 2010 à 7:33:21

    Bonjour, je programme en vb.net sous Visual Studio. J'ai une question à propos d'une textbox, dans laquelle je pourrais écrire, quel est l'évènement qui traduis le "au moment où la touche entrée est pressée pendant que l'on écrit dans le textbox "? Et une autre question aussi: quel est la commande vb.net pour dire à la textbox "fait un retour à la ligne"? Un peu comme "\n" dans les autres langages? Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      10 novembre 2010 à 8:17:29

      Bonjour, pour que ta textbox réagit dès que tu appuie sur la touche "entrée", place tes instructions dans cette sub :

      Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
              If e.KeyChar = Chr(13) Then 'chr(13) correspond à la touche "entrée", tu peux mettre la touche que tu veux
      'les instructions
              end if
      end sub
      


      Pour faire un retour chariot si je dis pas de bêtises, utilise

      textbox1.text = textbox1.text & vbCrlf & "ton texte a ajouter ou rien si tu ne veux rien:)"
      

      Assure toi d'avoir activer la propriété "multiline" de ta textbox
      • Partager sur Facebook
      • Partager sur Twitter
        10 novembre 2010 à 13:48:20

        Super!!! :D Ca marche à merveille!! Merci beaucoup! Une dernière question juste, j'ai la propriété ScrowBarrs à Vertical et j'aimerais savoir comment faire pour que la scrowbarr soit automatiquement en bas lorsque l'on insère un nouveau texte, parce que ma textbox m'affiche toujours les premiers textes que j'ai insérés et si ma textbox est pleine et que je veux voir le dernier texte, je dois descendre ma scrowbarr. Je pense qu'il doit y avoir une propriété pour ça aussi? En tout cas merci beaucoup pour ton aide déjà!
        • Partager sur Facebook
        • Partager sur Twitter
          10 novembre 2010 à 13:59:26

          Pas de quoi ! :D

          Pour ton problème de scrollBar, j'ai jeté un coup d'oeil,
          J'ai pensé à un truc du genre :
          textbox1.scrollbars.value = textbox1.scrollbars.maximum
          

          Un peu comme pour une progressbar mais ces propriétés n'existe pas apparemment.

          A mon avis, il va falloir trouver un autre moyen pour que ton texte soit en vue (autre que mettre la scrollbar au plus bas).
          Je sais pas trop, par exemple, au lieu d'ajouter ton texte a la suite du texte existant, tu l'ajoute avant le texte existant et tu met un petit vbCtrlf à la suite.

          De cette façon (y'a juste à inverser) :
          textbox1.text = "ton texte a ajouter ou rien si tu ne veux rien:)"  & vbCrlf & textbox1.text
          


          De cette manière le dernier texte ajouté à la textbox sera automatiquement en haut.
          Après en fonction de ce que tu veux faire ça peut ne pas être une solution valable.
          • Partager sur Facebook
          • Partager sur Twitter
            10 novembre 2010 à 14:48:22

            En fait, je travaille sur un programme dans lequel il y aurait un espèce de minichat. J'ai donc une textbox1 dans laquelle on écrit le message et lorsque l'on appuie sur "entrée", le texte apparait dans la textbox2 (multiline true, scrowbarr vertical ect...) donc il serait plus logique d'afficher les nouveaux messages en bas de la textbox2. Voici mon script pour l'instant :
            Dans ma classe Account



            Public Sub Parler(ByVal Message As String)
            Form1.TextBox1.Text = ""
            Form1.TextBox2.Text += vbCrLf & Name & " : " & Message
            End Sub



            Et dans mon form :




            Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            If e.KeyChar = Chr(13) Then
            Monaccount.Parler(TextBox1.Text)
            End If

            End Sub


            Donc jusque là tout va bien mais j'aimerais pourvoir faire en sorte que la scrowbarr soit toujours vers le bas ^^ Histoire que ce soit logique.

            PS: Désolé de ne pas avoir entouré mon code de balises codes mais lorsque je le fais, et que je poste mon message je tombe sur "page web indisponible". Avis aux modérateurs...
            • Partager sur Facebook
            • Partager sur Twitter
              10 novembre 2010 à 15:04:23

              Je ne sais pas comment faire comme dit pour le problème de la scrollbar, mais au pire tu peux toujours afficher l'heure d'écriture du message avant le prénom par exemple :


              Public Sub Parler(ByVal Message As String)
              Form1.TextBox1.Text = ""
              Form1.TextBox2.Text += vbCrLf & FormatDateTime(My.Computer.Clock.GmtTime, DateFormat.LongTime) & Name & " : " & Message
              End Sub


              De cette façon (à défaut de savoir comment bouger cette satanée scrollbar) l'utilisateur verra l'heure, la minute et la seconde d'envoie du message :)
              En espérant que ça t'aide ^^

              PS : les balises ne fonctionnent plus bizarrement
              • Partager sur Facebook
              • Partager sur Twitter
                10 novembre 2010 à 15:31:48

                Bonjour,

                Il faut utiliser la méthode ScrollToCaret

                Cordialement !
                • Partager sur Facebook
                • Partager sur Twitter
                Censément, quelqu'un de sensé est censé s'exprimer sensément.
                  10 novembre 2010 à 15:37:55

                  J'ai essayé de le mettre mais ça ne change rien =/ je dois le mettre où dans mon code exactement? (voir mon code plus haut)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 novembre 2010 à 16:33:59

                    Et comme ca ?
                    Public Sub Parler(ByVal Message As String)
                        Form1.TextBox1.Text = ""
                        Form1.TextBox2.Text += vbCrLf & FormatDateTime(My.Computer.Clock.GmtTime, DateFormat.LongTime) & Name & " : " & Message
                        Form1.TextBox2.SelectionStart = Form1.TextBox2.Text.Length
                        Form1.TextBox2.SelectionLength = 0
                        Form1.TextBox2.ScrollToCaret()
                    End Sub
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 novembre 2010 à 16:44:21

                      Ca marche :D mais est ce que tu pourrais juste m'expliquer ton code histoire que je sache comment procéder maintenant? Je ne comprend pas ça :



                      Form1.TextBox2.SelectionStart = Form1.TextBox2.Text.Length
                          Form1.TextBox2.SelectionLength = 0
                          Form1.TextBox2.ScrollToCaret()
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 novembre 2010 à 17:06:26

                        HolyView: quelques incohérences dans ton code (rien de grave ;) )

                        Tu concatènes (au passage "je préfère" utilise &= que += pour cela) à la suite du texte existant (que tu viens de supprimer) autant directement écrire (j'ai préféré utiliser Environment.NewLine au lieu de vbCrLf "on va dire" que c'est équivalent et que c'est plus par goût (conviction personnelle) donc ne pas trop y prêter attention)
                        Form1.TextBox2.Text = Environment.NewLine & FormatDateTime(My.Computer.Clock.GmtTime, DateFormat.LongTime) & Name & " : " & Message
                        

                        Déjà on se rend compte que là le saut de ligne ne sert plus trop à grand chose (de la manière dont c'est écrit ici)
                        Ensuite étant donné que tu viens de mettre du texte, le curseur se trouve à la fin de celui-ci, pas besoin de repositionner le curseur à la fin (même si je peux comprendre l'intérêt de montrer comment faire si jamais ce n'était pas le cas dans le contexte d'utilisation de l'OP)

                        En ce qui concerne le code en lui même:
                        Quand je vois ce Form1.TextBox2 j'ai peur, soit c'est du code utilisé depuis Form1 et dans ce cas il vaut mieux utiliser Me.TextBox2 (voire directement TextBox2) et si c'est depuis un autre formulaire rien ne garantit d'utiliser là la bonne instance de Form1 (si plusieurs Form1 sont ouvertes)
                        Il serait bien de songer à nommer ses contrôles par exemple contenuChat.Text c'est plus parlant que TextBox2.Text
                        FormatDateTime est plutôt une méthode VBS il me semble donc à éviter dans la mesure du possible, et au vu du nombre de concaténation dans l'histoire je passerais par un String.Format comme ceci:
                        'Note j'ai remis la concaténation au cas où
                        contenuChat.Text &= String.Format("{0}{1} {2} : {3}", Environment.NewLine, DateTime.UtcNow.ToLongTimeString, Name, Message)
                        


                        Cordialement !
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Censément, quelqu'un de sensé est censé s'exprimer sensément.

                        [VB.NET] Retour à la ligne textbox et touch entrée

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown