VB.NET Line Input有办法让输入的字符不显示在控制台上吗

发布于:2025-05-10 ⋅ 阅读:(9) ⋅ 点赞:(0)

在 Visual Basic.NET 里,Line Input 语句会在控制台显示用户输入的字符。要是你不想让输入的字符显示出来,例如在输入密码这种需要保密的场景下,可以使用 Console.ReadKey 方法来实现这个需求。下面为你介绍几种实现方式:

1. 使用 Console.ReadKey(True) 方法(回显星号)

这种方法会隐藏用户输入的字符,并且用星号(*)来替代显示,这样用户能知道自己输入了多少个字符。

Sub Main()
    Console.Write("请输入密码: ")
    Dim password As String = ""
    Dim key As ConsoleKeyInfo
    
    ' 循环读取按键,直到用户按下 Enter 键
    Do
        key = Console.ReadKey(True) ' True 参数表示不显示输入的字符
        
        ' 处理退格键
        If key.Key = ConsoleKey.Backspace AndAlso password.Length > 0 Then
            password = password.Substring(0, password.Length - 1)
            Console.Write(vbBack + " " + vbBack) ' 清除显示的星号
        ElseIf key.Key <> ConsoleKey.Enter Then
            password += key.KeyChar
            Console.Write("*") ' 显示星号替代实际字符
        End If
    Loop Until key.Key = ConsoleKey.Enter
    
    Console.WriteLine() ' 换行
    Console.WriteLine($"你输入的密码是: {password}")
End Sub

2. 使用 Console.ReadKey(True) 方法(完全隐藏输入)

这种方法会完全隐藏用户输入的字符,控制台不会显示任何内容。

Sub Main()
    Console.Write("请输入密码: ")
    Dim password As String = ""
    Dim key As ConsoleKeyInfo
    
    ' 循环读取按键,直到用户按下 Enter 键
    Do
        key = Console.ReadKey(True) ' True 参数表示不显示输入的字符
        
        ' 处理退格键
        If key.Key = ConsoleKey.Backspace AndAlso password.Length > 0 Then
            password = password.Substring(0, password.Length - 1)
        ElseIf key.Key <> ConsoleKey.Enter Then
            password += key.KeyChar
        End If
    Loop Until key.Key = ConsoleKey.Enter
    
    Console.WriteLine() ' 换行
    Console.WriteLine($"你输入的密码是: {password}")
End Sub

3. 创建一个通用的输入函数

为了提高代码的复用性,你可以创建一个通用的函数来处理隐藏输入的操作。

vbnet

Module Module1
    Sub Main()
        Dim password As String = ReadPassword("请输入密码: ")
        Console.WriteLine($"你输入的密码是: {password}")
    End Sub
    
    Function ReadPassword(prompt As String) As String
        Console.Write(prompt)
        Dim password As String = ""
        Dim key As ConsoleKeyInfo
        
        Do
            key = Console.ReadKey(True)
            
            If key.Key = ConsoleKey.Backspace AndAlso password.Length > 0 Then
                password = password.Substring(0, password.Length - 1)
                Console.Write(vbBack + " " + vbBack)
            ElseIf key.Key <> ConsoleKey.Enter Then
                password += key.KeyChar
                Console.Write("*")
            End If
        Loop Until key.Key = ConsoleKey.Enter
        
        Console.WriteLine()
        Return password
    End Function
End Module

代码说明:

  • Console.ReadKey(True):这个方法会读取用户按下的按键,True 参数的作用是让按键不显示在控制台上。
  • 处理退格键:在代码中,我们对退格键进行了特殊处理,这样用户就可以删除输入错误的字符。
  • 显示星号:当用户输入字符时,控制台会显示星号(*),让用户能直观地知道自己输入了多少个字符。
  • 循环读取:程序会不断循环读取按键,直到用户按下 Enter 键才会结束输入。

通过使用这些方法,你就能在控制台应用程序中实现隐藏用户输入字符的功能了。


网站公告

今日签到

点亮在社区的每一天
去签到