【问题标题】:VB.NET Console.ReadLine() min length?VB.NET Console.ReadLine() 最小长度?
【发布时间】:2014-05-30 21:05:57
【问题描述】:

在 VB.NET 中使用Console.ReadLine(),您如何能够从控制台读取少于标准的 254 个字符?

我尝试过使用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)

它限制了我并返回字符串,但如果用户输入少于 10 个字符,它怎么能工作?

【问题讨论】:

  • 您使用的是 VB.NET 吗? VBA 中没有控制台。
  • 这是你想要做的吗?stackoverflow.com/questions/3544467/…
  • 我认为您可以设法在 VB.Net 中编写一个循环。 :) 关键是您可以使用 Console.ReadKey() 只允许用户输入您想要的任意数量的字符。您对每个字符使用 ReadKey(),并且每次运行时,都会增加一个计数器。当计数器太高时停止将字符写入控制台并停止将其附加到字符串。
  • 好的,我明白了,我会很快为此编写一些代码,看看它是否有效,谢谢。
  • 这对于 cmets 来说太过分了,实际上与@Savanna 引用的问题相同,该问题还显示了在按下 enter 时如何跳出循环。无论如何我都会抛出一个答案!

标签: vb.net console-application console.readline


【解决方案1】:

要将输入限制为 10 个字符,同时允许通过按 Enter 键输入少于 10 个字符,您可以使用这样的循环。它会检查回车键,如果按下则退出循环,否则一旦输入 10 个字符,循环自然会结束。

编辑 - 每 cmets 更新

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

【讨论】:

  • 这接近我需要的,但是我需要用户在达到 10 或以下时始终按 Enter,并且我需要他们能够返回并删除他们已经使用返回。但这仍然非常有用。也许 do while 循环可能更适合这项工作。
  • 我认为我在上一条评论中所说的可能很难做到,它只是烦人没有简单的方法来限制用户在仍然使用 readline 时可以输入的长度。
  • @Hguin 处理删除变得更加有趣。退格键很容易,所以如果这足够了,我会更新答案。如果你想处理光标键,你必须开始付钱给我! :-)
  • 非常感谢马克,你很有帮助:)
  • @Hguin 如果它适合你,别忘了把它标记为答案:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多