2015-06-25 1 views
0

У меня есть некоторые проблемы с RichTextBox. Мне нужно ограничить размеры RTB относительно необходимого номера символа (10 для высоты 10 для ширины). Я пытался ограничить количество строк с использованием свойства maxLength .I означает, что я могу ограничить длину строки Eg 10, если я определяю максимальную длину как 100, может быть только 10 строк. Все нормально, без ввода ключа. Но когда я нажимаю кнопку ввода, он не учитывает остальную текущую строку. Если я нажимаю кнопку ввода после 6-го символа строки, она переходит к следующей строке. И подсчитайте предыдущую строку как поле 6.So дольше. Спасибо заранее ... Мой код ниже.VB Как ограничить номер строки RichTextBox

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RichTextBox1.KeyDown 
    'Here im trying to count character number of each line 

    Dim count As Integer = 0 
    For Each s As String In Me.RichTextBox1.Lines 
     count = count + 1 
     MsgBox(count) 

     Dim nextLineText As String = s 

     If e.KeyCode = Keys.Enter Then 
      If count < (TakeFromCombo(ComboBox1)) Then 
       RichTextBox1.MaxLength = RichTextBox1.MaxLength - (TakeFromCombo(ComboBox1) - nextLineText.Length) 
      End If 
     End If 

     'I tried to disable enter key at last line 
     If count = TakeFromCombo(ComboBox1) Then 
      If e.KeyCode = Keys.Enter Then 
       e.Handled = True 
      End If 
     End If 
    Next 

End Sub 
+0

Как насчет тестирования 'Lines.GetUpperBound (0) RTB' в событии 'TextChanged'? –

+0

Спасибо за ответ. Я могу достичь количества строк. Это не проблема. Проблема в том, что я не могу установить максимальный номер строки вызывает клавишу ввода. –

+0

Очевидно, что свойство MaxLength совершенно бесполезно, поэтому не используйте его. Вам нужно будет отслеживать событие KeyPress. Или просто предположите, что пользователь не является idjut и проверяет ввод данных с событием Validating, которое также поможет вам разобраться с угловыми шкафами, такими как пользователь, вставляющий текст из буфера обмена. –

ответ

0

Как насчет этого? (Где rtb1 ваш RichTextBox):

Private Sub rtb1_KeyDown(sender As Object, e As KeyEventArgs) Handles rtb1.KeyDown 
    If rtb1.Text.Length > 0 Then 
     If rtb1.Lines.Count = 11 Then 
      e.SuppressKeyPress = True 
     End If 
     If rtb1.Lines(rtb1.GetLineFromCharIndex(rtb1.GetFirstCharIndexOfCurrentLine)).Length > 9 And e.KeyCode <> Keys.Return Then 
      e.SuppressKeyPress = True 
     End If 
    End If 
End Sub 

Инструменты для манипулирования этой ситуации немного сырой. GetFirstCharIndexOfCurrentLine возвращает индекс символа во всей строке текста RTB. GetLineFromCharIndex(i) получает индекс строки текста, который содержит i. Lines() возвращает массив всех строк (это только текст RTB, разделенный на возврат каретки, и Lines(i), как и любой массив, возвращает член массива в этом индексе (найденный с использованием двух ранее описанных методов RTB).

+0

Благодарим за ответ. Но я не понимаю третьего, если. Я добавил код. –

+0

Условие: Если currentLineLength> 9 и пользователь не просто нажал кнопку возврата. Он работает в вашем коде? – clweeks

+0

Я просто добавил подробное объяснение этой строки. – clweeks