Esta solución no funciona porque cuando se escribe continuamente, esto será tratado como 1 línea independientemente de la ninguna de las líneas que se ven en la pantalla.
Para resolver el problema, debe usar SendMessage API para contar el número de líneas que ve en la pantalla. Aquí está el código.
Private Declare Function SendMessageINT Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Const EM_GETLINECOUNT = &HBA
Private Sub txtText1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtText1.KeyPress
Const MAX_LINES = 13
Dim lngCount As Long
lngCount = SendMessageINT(txtText1.Handle, EM_GETLINECOUNT, 0, 0)
If lngCount = MAX_LINES And Asc(e.KeyChar) <> Keys.Back And Asc(e.KeyChar) <> Keys.Delete Then
e.Handled = True
End If
End Sub
Junto con esto, es necesario averiguar la posición del cursor en el cuadro de texto, por lo que puede permitir al usuario escribir. En el código anterior, una vez que llega a 13 líneas, el usuario no podrá ingresar ninguna línea. Para superar eso, debes averiguarlo, el cursor está en qué línea. Usa el siguiente código para eso.
nuevas de esto, junto con la declaración de la API
Private Const EM_LINEFROMCHAR = & HC9
A continuación código debe ser colocado en eventos MouseDown, MouseUp, KeyDown y KeyUp del cuadro de texto.
intLineNo = SendMessageINT (txtText1.Manejar, EM_LINEFROMCHAR, -1, 0 &) + 1
Después de encontrar el LineNo, puede hacer la evaluación en el evento KeyPress del TextBox.
+1 Buena pregunta –
Ramesh, he añadido una nueva solución a mi respuesta que los usuarios puedan agregar más líneas cuando se exceden las líneas máx. No es necesario editar o truncar el valor del cuadro de texto existente. Esa es la que necesita usar. –
@Rashmi, pero eso no maneja muchos escenarios. Al igual que copiar y pegar, ajuste de texto, etc. –