2010-12-02 4 views
1
<TextBox Height="?" Width="?" AcceptReturn="true" /> 

Height = Random; Ширина = случайный; Например, высота 60, ширина 100. Как контролировать lentgh занесены текста меньше, чем размер TextBoxwpf, как ограничить MaxLength TextBox?

ответ

5

Использование MaxLength

EDIT:

Подождите, что? Вы хотите ограничить количество символов в ширине TextBox? Почему так?

EDIT2:

Вы можете измерить длину строки с помощью Graphics.MeasureString. Вот метод расширения, который делает то, что вы хотите:

public static class TextBoxExtension 
{ 
    public static int VisibleCharCount(this textBox textBox) 
    { 
     int count = 0; 

     do { 
      count++; 
      var testString = new string('X', count); 
      var stringWidth = System.Drawing.Graphics.MeasureString(testString, textBox.Font);     
     } while (stringWidth < textBox.Width); 

     if (stringWidth == textBox.Width) 
      return count; 
     else 
      return count-1; 
    } 
} 

Используйте это так:

myTextBox.MaxLength = myTextBox.VisibleCharCount(); 

EDIT3:

Если TexBox является MultiLine, и вы также хотите взять высоту во внимание, вы можете использовать перегрузку MeasureString, которая принимает размер. Я оставляю это для вас, чтобы соответствующим образом изменить свой пример.

+0

Это формы, а не WPF – Arcturus 2010-12-02 12:41:46

+0

Это шаблон report.user может сделать TextBox. Ограничить это, чтобы избежать проблемы с печатью. – doull 2010-12-02 13:03:09

0

Используйте MaxLength недвижимость на TextBox, который может быть довольно статическим после инициализации.

ИЛИ

Вы можете отменить ввод текста с PreviewTextInput события:

textbox.PreviewTextInput += textbox_PreviewTextInput; 

void textbox_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    TextBox box = (TextBox) sender; 
    e.Handled = box.Text.Length > 5; 
} 
Смежные вопросы