2010-02-15 31 views
1

我想:如何將System.Windows.Controls.TextBox輸入重定向到流?

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    streamWriter.Write(e.Key.ToString()); 
} 

但我不知道如何將關鍵正確轉換爲字符串。我也試過:

private void textBox1_TextInput(object sender, TextCompositionEventArgs e) 
{ 
    streamWriter.Write(e.Text); 
} 

但該事件不叫。我去的最遠的是:

private string previous = string.Empty; 
private void textBox1_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    var text = textBox1.Text.Substring(previous.Length); 
    streamWriter.Write(text); 
    previous = textBox1.Text; 
} 

但是這有字符刪除和其他許多情況下的問題。 我該怎麼辦?

+1

在TextBox上,您可以處理PreviewTextInput而不是TextInput,「...可能已經由內部實現處理...」http://msdn.microsoft.com/zh-cn/library/ system.windows.uielement.textinput.aspx – Grokodile

回答

2

最簡單的方法是使用KeyPress而不是KeyDown

KeyPressEventArgs.KeyChar提供實際的字符,已適當地翻譯。只需將此字符直接寫入流中即可。


編輯:

在評論認爲這是WPF,而不是Windows窗體(如標籤)看到後,上面會不存在。

話雖這麼說,我在這裏問你的目標 - 用一個文本框寫入流,通過人物時尚人物,總是會出現問題。這是由於您在最後一句中寫的內容:

但是這存在字符刪除和許多其他情況的問題。

就個人而言,我會採取兩種不同的方法之一:

  1. 使用TextBox「緩衝區」,只有當焦點丟失等發送的全部內容以流通過這種方式,用戶可以根據需要刪除等,並且您始終擁有一個完整的「字符串」。這可能是我的第一選擇,如果你想要的行爲類似於你現在的樣子。

  2. 不要使用TextBox這一點。使用其他允許輸入文字的控件,但不能刪除或選擇。如果你必須使用一個文本框,並必須處理密鑰通過密鑰流,那麼你應該限制(通過行爲或附加屬性)的輸入,只有你想的字符,這意味着禁止刪除。

+0

我找不到'KeyPress'。我正在使用WPF。 –

+0

我只找到KeyDown和KeyUp。 –

+0

@Jader Dias:你的問題被標記爲windows-forms,所以我假設Windows窗體,而不是WPF ... –