【发布时间】:2017-04-13 17:11:50
【问题描述】:
我想在显示之前修改在 TextBox 中键入的文本,而不查看已键入的文本。
示例: xaml:
<TextBox x:Name="tb" TextChanged="tb_TextChanged">
my long text
</TextBox>
c#:
private void tb_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox tb = sender as TextBox;
if (tb != null)
{
//save caretIndex
int caretIndex = tb.CaretIndex;
//modify Text //can be any modification
//vvvvvvvvvvv Lines that I'm talking about
tb.Text.ToLower(); //or: tb.Text.ToLower(); etc.
char[] notAllowedChars = new char[] {'/t', '~', '#'}; //any other
foreach (char c in notAllowedChars)
{
tb.Text = tb.Text.Replace(c, '_'); //replace unwanted characters
}
//^^^^^^^^^^^^ these lines modify the whole text
//restore caretIndex
tb.CaretIndex = caretIndex;
}
}
在该示例中,将修改整个文本。但是所有其他字符都已修改。所以我不想再经历它们。我只想在插入之前修改更改的文本。
我说的是 100.000 多个字符。这意味着,查找所有字符会导致不必要的性能问题。
有没有什么解决办法或者是不可能的需求。
【问题讨论】:
-
我会质疑将 100,000 个字符放入
TextBox以 开始 的智慧:) -
查看标记的重复项。只需使用
Lower而不是Upper。 -
@BradleyDotNET :D 你完全正确。我想显示大文本文件,它们可以有超过 100.000 个字符:)
-
@PeterDuniho 很抱歉误导了你。
tb.Text.ToLower();只是文本修改的一个例子 -
有多种解决方案,具体取决于您要究竟做什么。 Stack Overflow 已经充满了描述各种过滤和/或更改文本输入的方法的答案。您的问题“是否有任何解决方案”本质上太宽泛了。请做一些研究,尝试一下,如果您有一些具体困难,请发布一个问题,其中包含一个很好的minimal reproducible example,准确显示您尝试了什么,并详细说明您具体是什么无法解决。
标签: c# wpf textbox textchanged