限制文本框中每行的最大字符数

说我有以下内容:

 

有没有办法可以将每行的最大字符数限制为60?

我已经看到了通过keydown事件来实现它的方法,但这似乎并不是万无一失的(即在长文本块中粘贴的内容)。

鉴于您正在响应keydown事件,我假设您要确保TextBox后面的字符串遵循“每行60个字符”规则。 如果是这种情况,您应该在TextBox上创建一个订阅TextChanged事件的事件。 在那里你可以修复文本,并截断或拆分太长的行。

(编辑)要解决显示部分,你可以像Kafuka建议的那样:只需将盒子放宽到足以容纳60个字符,如果你想确定,可以使用等宽字体。 如果你确定字符串是正确的,这应该很容易排成一行。

选择单声道间隔字体。 并计算具有60个字符的文本框的宽度。

我知道这是一个非常晚的答案,但是找到这个的人可以得到一个很好的答案,例如Ctrl + C和东西:

 private void textBox1_TextChanged(object sender, EventArgs e) { foreach (string line in textBox1.Lines) { if (line.Length > 60) { textBox1.Undo(); } } textBox1.ClearUndo(); } 

请注意,这确实意味着您不能再在文本框中使用Ctrl + Z,但如果这不打扰您,这是一个不错的选择,因为它适用于任何字体。

编辑这不适用于wpf文本框,只有Windows形成文本框

我真的不认为你可以在包装时这样做,因为包装会改变当前行以适应TextBox 。 即使在使用记事本时 ,也无法在启用Word Wrap时查看状态栏 ,因为在行时很难获得当前行索引及其长度。

我已设法设置每行的最大字符数,而TextWrapping属性设置为NoWrap 。 您首先需要获取当前行索引的长度。 然后,如果它是59或更多,处理输入。

  
 private void textBox1_KeyDown(object sender, KeyEventArgs e) { //Initialize a new int of name CurrentLine to get the current line the user is on int CurrentLine = textBox1.GetLineIndexFromCharacterIndex(textBox1.Text.Length); //Continue if the length of the current line is more or equal to 59 if (textBox1.GetLineLength(CurrentLine) >= 59) { //Don't insert the character e.Handled = true; } } 

谢谢,
我希望你觉得这有用 :)