8

我需要限制要粘贴到多行文本框中的字符数。

假设这是我要粘贴到文本框中的字符串:

女士们先生们,美好的一天!
我只是想知道

如果这是可能的,请帮助。

规则是 PER LINE 的最大字符数为 10,Maximum ROWS 为 2。应用规则,粘贴的文本应该是这样的:

美好的一天
,我只是想

4

5 回答 5

6

没有自动执行此操作。您需要处理TextChanged文本框上的事件并手动解析更改的文本以将其限制为所需的格式。

private const int MaxCharsPerRow = 10;
private const int MaxLines = 2;

private void textBox1_TextChanged(object sender, EventArgs e) {
    string[] lines = textBox1.Lines;
    var newLines = new List<string>();
    for (int i = 0; i < lines.Length && i < MaxLines; i++) {
        newLines.Add(lines[i].Substring(0, Math.Min(lines[i].Length, MaxCharsPerRow)));
    }
    textBox1.Lines = newLines.ToArray();
}
于 2013-07-19T03:48:03.007 回答
3

您可以捕获消息WM_PASTE(发送到您的TextBox)以自己处理:

public class MyTextBox : TextBox
{
    int maxLine = 2;
    int maxChars = 10;
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x302)//WM_PASTE
        {
            string s = Clipboard.GetText();
            string[] lines = s.Split('\n');
            s = "";
            int i = 0;
            foreach (string line in lines)
            {
                s += (line.Length > maxChars ? line.Substring(0, maxChars) : line) + "\r\n";
                if (++i == maxLine) break;
            }
            if(i > 0) SelectedText = s.Substring(0,s.Length - 2);//strip off the last \r\n
            return;
        }
        base.WndProc(ref m);            
    }
}
于 2013-07-19T03:50:58.430 回答
1

您可以通过以下方式实现此目的。设置maximum length文本框为 22

textBox1.MaxLength = 22;

在文本更改事件中执行以下操作

private void textBox1_TextChanged(object sender, EventArgs e)
{
     if (textBox1.Text.Length == 10)
     {
           textBox1.AppendText("\r\n");
     }
}

这将在 10 个字符后自动进入下一行

于 2013-07-19T03:37:53.583 回答
0

你为什么不处理剪贴板数据来实现这一点。下面是一个小例子。

String clipboardText = Clipbard.GetText( );

// MAXPASTELENGTH - max length allowed by your program

if(clipboardText.Length > MAXPASTELENGTH)
{

   Clipboard.Clear(); 

   String newClipboardText = clipboardText.Substring(0, MAXPASTELENGTH);

   // set the new clipboard data to the max length 
   SetData(DataFormats.Text, (Object)newClipboardText );

}

现在将数据粘贴到您喜欢的任何位置,数据将被修剪到您的程序允许的最大长度。

于 2013-07-19T04:33:49.943 回答
-2
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (textBox1.Text.Length == 10)
        {
            textBox1.MaxLength = 10;
            //MessageBox.Show("maksimal 10 karakter");
        }
    }
于 2017-10-17T07:20:03.020 回答