【发布时间】:2023-03-23 21:42:01
【问题描述】:
我用this Link 创建多行TextBox 效果更好,但如果我想设置TextBox 文本计数器
label1.Content = textBox1.Text.Length;
上面的行工作正常,但问题是当我在TextBox 计数器中按回车键时,TextBox 计数器中会增加 2 个字符。
我该如何完成这项任务,请帮助我。
任何帮助表示赞赏!
【问题讨论】:
我用this Link 创建多行TextBox 效果更好,但如果我想设置TextBox 文本计数器
label1.Content = textBox1.Text.Length;
上面的行工作正常,但问题是当我在TextBox 计数器中按回车键时,TextBox 计数器中会增加 2 个字符。
我该如何完成这项任务,请帮助我。
任何帮助表示赞赏!
【问题讨论】:
Andrey Gordeev 的回答是正确的(他 +1),但没有为您的问题提供直接的解决方案。如果您使用调试器检查textBox1.Text 字符串,您会看到引用的\r\n 字符。另一方面,如果您打算直接影响它们(例如通过.Replace),您将一无所获。
因此,您的问题的实际答案是:依靠Environment.NewLine。示例代码:
label1.Content = textBox1.Text.Replace(Environment.NewLine, "").Length;
【讨论】:
这是因为 newline 由两个符号表示:\r 和 \n
【讨论】:
如果您在“Enter”上只需要一个字符,那么您可以在 TextBox 上处理 PreviewKeyDown 事件并粘贴以下处理程序:
private void Txt_OnPreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
var txtBox = e.Source as TextBox;
var selectionStart = txtBox.SelectionStart;
txtBox.Text = txtBox.Text.Insert(selectionStart, "\n");
txtBox.Select(selectionStart + 1, 0);
e.Handled = true;
}
}
【讨论】:
使用下面的代码代替label1.Content = textBox1.Text.Length;
label1.Text = textBox1.Text.Replace(Environment.NewLine, "").Length.ToString();
请不要忘记添加using System.Text;
【讨论】: