2016-12-17 3 views
2

を:私は、コンソール上のデフォルトIPアドレスのテキストの準備ができて置きたいC#コンソールにテキストを入力する代わりに、それを入力する方法は?私のC#のコンソールアプリケーションでは、IPアドレスを挿入するIプロンプトユーザー

enter image description here

string strIpAddress; 
Console.WriteLine("Type the IP Address:"); 
strIpAddress = Console.ReadLine(); 

出力は次のようになりますユーザーが見てEnterキーを押すだけです。デフォルトのIPが無効である場合、ユーザはテキスト(とバックスペース)を削除し、IPアドレスを修正してからENTERを押します。私はこれを行う方法がわからない

enter image description here

:ユーザーは、このように表示されます!任意の暗示のため;-(

感謝。

+1

私はそれが重複していると信じています:http://stackoverflow.com/questions/1655318/how-to-set-default-input-value-in-net-console-app – evilkos

+0

頭に浮かんだ一つのアイデアは、キーボードを引っ掛けて自分でタイプをシミュレートすることができますが、何かが過剰なものになることがわかります。 – Abion47

+3

通常の**簡単な**方法は、ユーザーが 'IPアドレス[192.168.1.1]:'を入力するような入力をした場合、デフォルトがどのようになるかを単に知らせることです。簡単に入力をシミュレートするか、エディターを自分で構築する必要があります。 –

答えて

2

編集したユーザの編集を可能にする

Console.Write("Type the IP Address:\n"); 
SendKeys.SendWait("192.168.1.1"); //192.168.1.1 text will be editable :) 
strIpAddress=Console.ReadLine(); 

これは参照へのSystem.Windows.Formsを追加し、名前空間を追加する必要があります。

+2

まあ、デフォルト値はこの方法で編集可能。しかし、おそらく唯一の単純なハーフソリューションであるという利点があります。 – evilkos

+0

私は実際にそのような "デフォルト"の目的のためにそれを意図しました – user3598756

+0

あなたの答えdear @ user3598756をありがとうが、それはユーザーによって編集できません。このようにして、私はユーザにプロンプ​​トを出すべきです: 'これがIPアドレスであれば、Enterを押します。それ以外の場合は、自分で入力してEnterキーを押してください! ';-) – Shamim

3

より洗練された例Console.SetCursorPosition()を使用してカーソルを(可能であれば)左に移動し、Console.ReadKey()を使用してキーを直接読み込み、バックスペースプレスを傍受し、キーを入力します:

0123あなたがもので、最後の型付きのリコールのための LeftArrowRightArrowプレス、あるいは UpArrowプレスのためのサポートを追加したい場合は
using System; 
using System.Linq; 

namespace StackoverflowTests 
{ 
    class Program 
    { 

     public static void Main(string[] args) 
     { 
      Console.WriteLine("Type the IP Address: "); 
      //Put the default IP address 
      var defaultIP = "192.168.0.190"; 
      Console.Write(defaultIP); 

      string input = defaultIP; 
      //Loop through all the keys until an enter key 
      while (true) 
      { 
       //read a key 
       var key = Console.ReadKey(true); 
       //Was this is a newline? 
       if (key.Key == ConsoleKey.Enter) 
       { 
        Console.WriteLine(); 
        break; 
       } 
       //Was is a backspace? 
       else if (key.Key == ConsoleKey.Backspace) 
       { 
        //Did we delete too much? 
        if (Console.CursorLeft == 0) 
         continue; //suppress 
        //Put the cursor on character back 
        Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop); 
        //Delete it with a space 
        Console.Write(" "); 
        //Put it back again 
        Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop); 
        //Delete the last char of the input 
        input = string.Join("", input.Take(input.Length - 1)); 
       } 
       //Regular key? add it to the input 
       else if(char.IsLetterOrDigit(key.KeyChar)) 
       { 
        input += key.KeyChar.ToString(); 
        Console.Write(key.KeyChar); 
       } //else it must be another control code (ESC etc) or something. 
      } 

      Console.WriteLine("You entered: " + input); 
      Console.ReadLine(); 
     } 
    } 
} 

は、さらに洗練され行うことができます。

+0

これはおそらく "シンプル"なのです。 – Abion47

+0

ありがとう@マクシミリアン、私はあなたのコードをテストして、それはかなり良い動作します。私が後でそれに加えるべき唯一のことは、 'ArrowUp'や 'ESC'のような文字以外のキーストロークを避けることです。私が気づいていない.NETコンソールライブラリで、あらかじめ定義されたメソッドを探し回っていました。 – Shamim

+0

@Shamimあなたは 'else if(char。IsLetterOrDigit(key.KeyChar)) 'これらのキーをキャッチする、私の最初の場所でこれをしないための悪い。 –

関連する問題