2011-09-27 73 views
13

可能重複:
C# Advanced Console I/O在C#控制檯應用程序中編輯文本?

是否存在編輯在C#控制檯應用程序文本的方法嗎?換句話說,是否可以在命令行上放置預定義的文本,以便用戶可以修改文本,然後將其重新提交給應用程序?

+4

我不相信我的問題是提供的問題的重複。我的需求更爲具體,就這個問題給出的答案並沒有回答這個問題。據我所知,Console類沒有任何東西可以幫助將可編輯文本放在命令行上。 – Chev

+1

除非您編程,否則在控制檯應用程序中沒有命令行。這可以通過Console類來完成。編輯:cmd行是shell,用來啓動控制檯應用程序。當它正在運行並且你正在輸出東西到控制檯窗口時,你並沒有使用shell命令,即命令行。你應該解釋已經被按下的鍵並且根據鍵執行特定的動作(例如,當按下退格鍵時將光標移回一個字符)。' –

+1

@Alex Ford:關於「更具體」 - 「我怎麼做打印詮釋「是更具體然後」我如何打印對象「,看到沒有區別。 – agibalov

回答

11

我想到的一件事是......模擬擊鍵。 並採用一個簡單的例子的SendKeys:

static void Main(string[] args) 
{ 
    Console.Write("Your editable text:"); 
    SendKeys.SendWait("hello"); //hello text will be editable :) 
    Console.ReadLine(); 
} 

注意:這僅適用於活動窗口。

+1

你的方法比我的簡單。看起來我喜歡發明自行車:)) – Vasya

+0

你的代碼真的很好,你沒有發明自行車,因爲在我建議的解決方案中需要使用System.Windows.Forms命名空間或PInvoke SendInput或熟悉的東西。 +1從我:) – Reniuz

+0

謝謝。我們都認爲彼此的方法很好,這很好。 – Vasya

15

是的。您需要使用Console的方法SetCursorPosition。例如:

Console.WriteLine("hello"); 
    Console.SetCursorPosition(4, 0); 
    Console.WriteLine("  "); 

它會顯示「地獄」 您需要的ReadLine方法,讓你在控制檯中編輯正符號(默認字符串),並從用戶返回字符串的定製實現。這是我的例子:

static string ReadLine(string Default) 
{ 
    int pos = Console.CursorLeft; 
    Console.Write(Default); 
    ConsoleKeyInfo info; 
    List<char> chars = new List<char>(); 
    if (string.IsNullOrEmpty(Default) == false) { 
     chars.AddRange(Default.ToCharArray()); 
    } 

    while (true) 
    { 
     info = Console.ReadKey(true); 
     if (info.Key == ConsoleKey.Backspace && Console.CursorLeft > pos) 
     { 
      chars.RemoveAt(chars.Count - 1); 
      Console.CursorLeft -= 1; 
      Console.Write(' '); 
      Console.CursorLeft -= 1; 

     } 
     else if (info.Key == ConsoleKey.Enter) { Console.Write(Environment.NewLine); break; } 
     //Here you need create own checking of symbols 
     else if (char.IsLetterOrDigit(info.KeyChar)) 
     { 
      Console.Write(info.KeyChar); 
      chars.Add(info.KeyChar); 
     } 
    } 
    return new string(chars.ToArray()); 
} 

此方法將顯示字符串默認。希望我明白你的問題是正確的(我懷疑它)

+1

你能澄清一點嗎?我不確定我明白。我將這段代碼放在了一個新的控制檯應用程序中,它確實顯示「地獄」,但是如何幫助我在命令行上編輯該文本? – Chev

+2

+1無需參考System.Windows.Forms –

+0

很好的答案。對於SendKeys有問題的用戶非常有用! –