如何将System.Windows.Controls.TextBox输入重定向到流?

时间:2010-02-15 18:31:24

标签: c# .net textbox stream winforms

我试过了:

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

但我不知道如何正确地将Key转换为字符串。我也尝试过:

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 个答案:

答案 0 :(得分:2)

最简单的选择是使用KeyPress代替KeyDown

KeyPressEventArgs.KeyChar提供已经适当翻译的实际字符。只需将此字符直接写入您的流。


编辑:

在评论中看到这是WPF,而不是Windows Forms(标记为),上面的内容将不存在。

话虽如此,我在这里质疑你的目标 - 使用文本框以字符方式写入流,总是会有问题。这是由于你在最后一句中所写的内容:

  

但是这有关于删除字符以及许多其他情况的问题。

就个人而言,我会选择两种不同的方法之一:

  1. 使用TextBox作为“缓冲区”,只在焦点丢失等时将整个内容发送到流中。这样,用户可以根据需要删除等,并且总是有一个完成“字符串”以使用。如果你希望这个行为与你现在的行为类似,那么这可能是我的第一选择。

  2. 不要使用TextBox。使用一些其他控件允许文本输入,但不允许删除或选择。如果您必须使用TextBox,并且必须处理逐个键的流式传输,那么您应该将输入(通过行为或附加属性)限制为仅您想要的字符,这意味着禁用删除。