如何限制Windows窗体应用程序中多行文本框中的每行字符
我在KeyPress
文本框的事件中做了类似这样的事情,但它不会转到行的开头的新行
if (txtNewNotes.Text.Length % 50 == 0) txtNewNotes.Text += Environment.NewLine;
答案 0 :(得分:3)
您正在检查的属性(txtNewNotes.Text
)适用于TextBox中的所有文本(所有行中的所有文本组合在一起)。
您需要检查的是txtNewNotes.Lines
属性,该属性返回TextBox中包含的每一行的string[]
。迭代这些字符串并检查它们的长度。
请记住,使用当前代码,您只在TextBox的末尾添加一个新行 您将需要处理用户返回到TextBox中间的一行并开始在那里编辑一行的情况,使该特定行长于50个字符的限制,并在结束时导致不需要的新行数量。 TextBox
答案 1 :(得分:1)
要始终在行的末尾使用以下代码:
if (txtNewNotes.Text.Length % 50 == 0 && textBox1.Text.Length >= 50)
{
txtNewNotes.Text += Environment.NewLine;
// This sets the caret to end
txtNewNotes.SelectionStart = txtNewNotes.Text.Length;
}
然而,这种实现仍然存在许多缺陷。例如,如果您手动更改行,此解决方案将不会注意到它。您可能希望使用txtNewNotes.Lines来跟踪一行中有多少个字符。
答案 2 :(得分:1)
要限制每行文本框中的文字,请使用
private void txtNewNotes_KeyDown(object sender, KeyPressEventArgs e)
{
if (txtNewNotes.Text.Length == 0) return;
if (e.KeyChar == '\r')
{
e.Handled = false;
return;
}
if (e.KeyChar == '\b')
{
e.Handled = false;
return;
}
int index = txtNewNotes.GetLineFromCharIndex(txtNewNotes.SelectionStart);
string temp = txtNewNotes.Lines[index];
if (temp.Length < 45) // character limit
{
e.Handled = false;
}
else
{
e.Handled = true;
}
}
当用户复制并粘贴文本时,需要处理的一件事是它不适用字符限制