Как насчет этого:
Обработайте событие TextChanged и сравнивайте каждый раз, когда оно изменяется. Он запускается для ввода текста и перетаскивания изображений.
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
if (richTextBox1.Rtf.Length > richTextBox1.MaxLength)
{
// do something here - I displayed a label for
// my example
label1.Text = "Text exceeds maximum size";
label1.ForeColor = Color.Red;
}
else
{
label1.Text = richTextBox1.Rtf.Length.ToString();
label1.ForeColor = Color.Red;
}
}
Это, похоже, сработало, хотя я, правда, не тратил на это много времени. Я подозреваю, что вы можете обрезать содержимое, если оно превышает максимальный размер.
Редактировать: Я подумал об этом еще немного, и я подозреваю, что вы можете использовать StringBuilder для хранения содержимого richtextbox каждый раз, и если попытаться превысить эту длину, восстановить данные до государство. Я признаю, что это немного глупо, но, похоже, работает. Примерно так:
StringBuild sb = new StringBuilder();
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
if (richTextBox1.Rtf.Length > richTextBox1.MaxLength)
{
richTextBox1.Rtf = sb.ToString();
}
else
{
sb.Insert(0,richTextBox1.Rtf);
}
}
Кажется, это работает довольно хорошо. Там может быть более элегантное решение.