我需要限制要粘贴到多行文本框中的字符数。
假设这是我要粘贴到文本框中的字符串:
女士们先生们,美好的一天!
我只是想知道
如果这是可能的,请帮助。
规则是 PER LINE 的最大字符数为 10,Maximum ROWS 为 2。应用规则,粘贴的文本应该是这样的:
美好的一天
,我只是想
没有自动执行此操作。您需要处理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();
}
您可以捕获消息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);
}
}
您可以通过以下方式实现此目的。设置maximum length
文本框为 22
textBox1.MaxLength = 22;
在文本更改事件中执行以下操作
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Length == 10)
{
textBox1.AppendText("\r\n");
}
}
这将在 10 个字符后自动进入下一行
你为什么不处理剪贴板数据来实现这一点。下面是一个小例子。
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 );
}
现在将数据粘贴到您喜欢的任何位置,数据将被修剪到您的程序允许的最大长度。
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Length == 10)
{
textBox1.MaxLength = 10;
//MessageBox.Show("maksimal 10 karakter");
}
}