限制Windows窗体应用程序中多行文本框中每行的字符数

时间:2014-11-10 16:04:29

标签: c# winforms textbox

如何限制Windows窗体应用程序中多行文本框中的每行字符

我在KeyPress文本框的事件中做了类似这样的事情,但它不会转到行的开头的新行

 if (txtNewNotes.Text.Length % 50 == 0) txtNewNotes.Text += Environment.NewLine;

3 个答案:

答案 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;
            }
        }

当用户复制并粘贴文本时,需要处理的一件事是它不适用字符限制