C# 如何将System.Windows.Controls.TextBox输入重定向到流?
我试过:C# 如何将System.Windows.Controls.TextBox输入重定向到流?,c#,.net,textbox,stream,winforms,C#,.net,Textbox,Stream,Winforms,我试过: 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 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;
}
但这在字符删除和许多其他情况下都存在问题。
我该怎么办?最简单的选择是使用
按键
而不是按键
提供已正确翻译的实际字符。只需将这个字符直接写入流
编辑: 在注释中看到这是WPF,而不是Windows窗体(如标记所示)后,上述内容将不存在 话虽如此,我还是质疑你的目标——使用文本框以逐个字符的方式向流中写入数据总是有问题的。这是因为你在最后一句话中写道: 但这在字符删除和许多其他情况下都存在问题 就我个人而言,我会采取两种不同的方法之一:
我找不到
按键
。我使用的是WPF。我只找到了KeyDown和keydup。@Jader Dias:你的问题被标记为windows窗体,所以我假设的是windows窗体,而不是WPF……你知道WPF的解决方案吗?@Jader Dias:编辑了我的答案,并提供了一些建议。在文本框中,你可以处理PreviewtInput而不是TextInput,这是“…可能已经由内部执行部门处理…”