2013-11-27 1 views
1

Я просто не уверен, как я могу маскировать с добавлением массивов. Мне также хотелось бы, чтобы система маскировки распознавала обратное пространство не как букву.Как я могу интерпретировать систему маскировки в моей системе входа?

Module Module1 

Sub Main() 

    Dim memofs As Char 
    Dim stdntpassword As String = Nothing 
    Dim staffpassword As String = Nothing 
    Console.Write("Are you a member of staff? (y/n) ") 
    memofs = Console.ReadLine 
    If memofs = "y" Or memofs = "Y" Then 

    ElseIf memofs = "n" Or memofs = "N" Then 
     Console.WriteLine("Password: ") 
     stdntpassword = Console.ReadLine 
    End If 

    For attempts As Integer = 1 To 5 

     Console.WriteLine() 
     Console.WriteLine("Attempt Number " & attempts) 
     Console.WriteLine() 
     Console.Write("Password: ") 
     staffpassword = Console.ReadLine 
     Dim fullline As String = "" 
     FileOpen(1, _ 
      "E:\Computing\Spelling Bee\StaffPasswords\staffpassword.csv", OpenMode.Input) 
     fullline = LineInput(1) 
     Dim item() As String = Split(fullline, ",") 
     If staffpassword = item(0) Then 
      Console.Clear() 
      staffmenu() 
     Else : FileClose(1) 
     End If 
     Console.Clear() 

Оценил,

ответ

3

Я сделал это раньше, но вместо того, чтобы маскировать пароль с, скажем, звездочка, я просто оставил его пустым (например, ввод пароля в Linux). Последнее довольно просто:

Dim keyInfo as ConsoleKeyInfo = Console.ReadKey(True) 
Dim enteredPassword as String = "" 
' Read each entered character until user presses Enter. 
While keyInfo.Key <> ConsoleKey.Enter 
    If keyInfo.Key = ConsoleKey.Backspace AndAlso enteredPassword.Length > 0 Then 
     enteredPassword = enteredPassword.Substring(0, enteredPassword.Length - 1) 
    Else 
     password &= keyInfo.KeyChar 
    End If 
    ' Read next entered character 
    keyInfo = Console.ReadKey(True) 
End While 

Чтобы действительно замаскировать ввод пароля, используйте ту же самую идею, но после того, как каждый символ вводится и анализируется, добавить Console.Write("*"c). Получить немного сложнее с забой, и единственный способ, которым я знаю, чтобы имитировать это было бы сделать:

Console.Write(ControlChars.Back)' move cursor back one column 
Console.Write(" "c) ' clear the asterisk 
Console.Write(ControlChars.Back)' move cursor back again to allow writing. 

Это немного симпатичнее в C# на мой взгляд (и работает с использованием '\b' вместо ControlChars.Back), поэтому результаты может различаться.

Также, если есть более простой способ сделать это, я бы хотел знать, как это выглядит, как изобретать колесо для довольно простой задачи.

+0

Вы мужчина! Большое спасибо! – user3042666

0

У этого post есть хороший рабочий пример для вас. Он маскируется с поддержкой backspace и redo.