如何在后台连续修剪文本框中的特定字符?

时间:2019-05-08 14:45:44

标签: c# textbox serial-port trim

我正在创建一个项目,程序在该项目中从串行端口获取数据并将其显示在文本框中。但是,连同数据一起,一些不需要的字符也通过串行端口输入到文本框中。我试图通过在textchanged事件中添加'.Trim()'方法来修剪它们。但是我无法获得理想的结果。我希望从文本框中连续修剪特定的字符,并且该方法应继续在后台运行。

textBoxResults_TextChanged(...)
{
  char[] trim=('a', 'b');
  textBoxResults.Text.Trim(trim);
}

请注意,这些字符是多个字符(例如,可以是g,m,a等) 我希望在接收到串行端口数据时或在从串行端口输入后直接在文本框中修剪所有保留指定字符的字符。

4 个答案:

答案 0 :(得分:0)

仅根据您提供的信息,我的建议是仅使用

textBoxResults.Text = textBoxResults.Text.Replace("<unwanted char>", "")

这将用空字符串替换字符串中的任何不需要的字符,事实上 删除了它们。 请记住,这需要为每个不需要的字符调用Replace(...)

答案 1 :(得分:0)

如果要提取多个字符,可以执行以下操作:

string[] trim = {"a", "b"};
foreach (var c in trim)
{
  textBoxResults.Text.Replace(c, string.Empty);
}

答案 2 :(得分:0)

与你们所有人所说的不完全相同,但经过一番谷歌搜索之后,一些东西归为一组。 string ToBeReplaceCharacters = @"a;b"; foreach(var RepChar in ToBeReplaceCharacters) { textBox1.Text = textBox1.Text.Replace(RepChar.ToString(), ""); } Stackloyd所说的对于单个字符是可以的,但不能替换多个字符。上面的代码满足了我的需求。

  

谢谢大家!

答案 3 :(得分:0)

如果使用正则表达式,则无需迭代要消除的每个字符。

//Reference to RegularExpressions
using System.Text.RegularExpressions;

...
//Code omitted...
...

//Put the code in TextChanged event
private void TextBoxResults_TextChanged(object sender, EventArgs e)
{
    textBoxResults.Text = Regex.Replace(textBoxResults.Text, "[ab]", "");
}

“ [ab]”字符串是RegEx模式... 在此模式中,您可以放置​​要消除的任何字符或字符范围。

简单的例子:

  • “ [a-zA-Z]”,您将消除任何虚构人物
  • “ [^ bla]”您将消除所有不等于'b','l'和'a'的字符。

还有其他一些模式示例:

abc…    Letters

123…    Digits

\d  Any Digit

\D  Any Non-digit character

.   Any Character

\.  Period

[abc]   Only a, b, or c

[^abc]  Not a, b, nor c

[a-z]   Characters a to z

[0-9]   Numbers 0 to 9

\w  Any Alphanumeric character

\W  Any Non-alphanumeric character

\s  Any Whitespace

\S  Any Non-whitespace character

更多信息在这里:

Microsoft Regex.Replace reference