VB.NET Console.ReadLine() min length?

1.1k Views Asked by At

How would you be able to read less than the standard 254 characters from the console, in VB.NET with Console.ReadLine()?

I have tried using Console.ReadKey():

Dim A As String = ""

Dim B As Char

For i = 0 To 10

    B = Console.ReadKey().KeyChar
    A = A & B

Next

MsgBox(A)

It limits me and it returns the string, but how could it work if a user was to enter less than 10 characters?

1

There are 1 best solutions below

6
On BEST ANSWER

To limit the input to 10 characters, while allowing for less that 10 characters to be entered by pressing the Enter key, you can use a loop like this. It checks for the enter key and exits the loop if it's pressed, or the loop will naturally end once 10 characters have been entered.

EDIT - updated per comments

Imports System.Text

Module Module1

    Sub Main()
        Dim userInput = New StringBuilder()
        Dim maxLength = 10
        While True
            ' Read, but don't output character
            Dim cki As ConsoleKeyInfo = Console.ReadKey(True)
            Select Case cki.Key
                Case ConsoleKey.Enter
                    ' Done
                    Exit While
                Case ConsoleKey.Backspace
                    ' Last char deleted
                    If userInput.Length > 0 Then
                        userInput.Remove(userInput.Length - 1, 1)
                        Console.Write(vbBack & " " & vbBack)
                    End If
                Case Else
                    ' Only append if less than max entered and it's a display character
                    If userInput.Length < maxLength AndAlso Not Char.IsControl(cki.KeyChar) Then
                        userInput.Append(cki.KeyChar)
                        Console.Write(cki.KeyChar)
                    End If
            End Select
        End While
        MsgBox("'" & userInput.ToString() & "'")
    End Sub

End Module