ESC鍵

2016-01-29 62 views
-1

我想:ESC鍵

while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape)) 
{ 
// do something 
} 

這不能幫助我並沒有做什麼,我需要.. 我的代碼是:

Console.WriteLine("Please enter your Login Details:"); 
        Console.Write("User Name: ");                
        string userName = Console.ReadLine(); 
        Console.Write("Password: "); 
        string Password = Console.ReadLine(); 

        if (cmd.Login(userName, Password))               
        { 
// my rest of my code 
} 

我需要在任何console.readline()如果我按下ESC去第一個代碼或開始把用戶名和密碼... 我需要按ESC在我的應用程序它重新啓動到第一階段在任何時間和任何階段..這可能嗎?

+2

的[偵聽在.NET控制檯應用程序按鍵]可能的複製(http://stackoverflow.com/questions/5891538/listen-for-key-press-in-net-console-app) – KidCode

+0

[檢查這個問題!](http://stackoverflow.com/questions/5891538/listen-for-key-press-in-net-console-app) – KidCode

+1

閱讀整個問題!他不問如何暫停,直到按下一個鍵。他問他如何在「Read」或「ReadLine」中捕獲按鍵,這樣如果用戶按下ESC,「Read」將中止,並且可以跳回到登錄過程的開始。 –

回答

1

Console.ReadKey()可用於偵聽特定按鍵,例如Escape鍵。

您可能需要更改方法以使用Console.ReadLine()以外的方法讀取用戶名和密碼輸入。看到這個問題:Using ReadLine() and ReadKey() Simultaneously

1

簡短的回答是,你不能這樣做,如果你使用Console.ReadConsole.ReadLine以獲取輸入。問題在於ReadReadLine是阻止調用行編輯等的調用(退格,刪除,左右移動等)。它是緩衝輸入。唯一的出路就是按Enter鍵或殺死程序。 ReadReadLine不做任何特殊的Escape處理。

我知道做你所要求的唯一方法是使用原始控制檯I/O。也就是說,使用Console.ReadKey來讀取每個單獨的鍵並顯示它,並且還處理退格,行尾等。這是一個真正的脖子上的痛苦,很難得到正確的。

下面的代碼接近你想要做的事情。基本上,如果用戶輸入名稱或密碼的空白值,那麼它將回到頂部。 ESC鍵將清除一個字段。所以如果在密碼提示符下輸入「foO」然後點擊ESC,該字段將被清空。然後他擊中回車,並將他帶回到開始處(即輸入名稱)。

這不完全是你要求的,但它可能是最好的,你會得到沒有很多努力。

private void DoIt() 
    { 
     string name; 
     string pw; 
     bool done = false; 
     do 
     { 
      Console.WriteLine(); 
      Console.WriteLine("LOGIN"); 
      Console.WriteLine(); 
      Console.Write("User name: "); 
      name = Console.ReadLine(); 

      if (string.IsNullOrWhiteSpace(name)) 
      { 
       continue; 
      } 

      Console.Write("Password: "); 
      pw = Console.ReadLine(); 

      if (string.IsNullOrWhiteSpace(pw)) 
      { 
       continue; 
      } 
      done = true; 
     } while (!done); 

     Console.WriteLine("Logging in ..."); 
    }