Questa soluzione non funziona perché quando si digita continuo, sarà trattata come 1 riga indipendentemente il no di linee che si vedono sullo schermo.
Al fine di risolvere lo stesso, è necessario utilizzare l'API SendMessage per contare il no di linee che si vedono sullo schermo. Ecco il codice.
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
Insieme a questo, è necessario trovare la posizione del cursore nella casella di testo, in modo da poter permettere all'utente di digitare. Nel codice precedente, quando raggiunge 13 righe, l'utente non sarà in grado di digitare alcuna riga. Per superare questo, devi scoprire, il cursore è in quale linea. Usa il codice qui sotto per quello.
dichiarare questo insieme alla dichiarazione API
Private Const EM_LINEFROMCHAR = & HC9
Questi codice deve essere inserito nel MouseDown, MouseUp, KeyDown e KeyUp eventi del testo.
intLineNo = SendMessageINT (txtText1.Handle, EM_LINEFROMCHAR, -1, 0 &) + 1
Dopo aver trovato il numero di riga, è possibile eseguire la valutazione nell'evento KeyPress di TextBox.
+1 Buona domanda –
Ramesh, ho aggiunto una nuova soluzione per la mia risposta che impedirebbe agli utenti di aggiungere più linee quando le linee max vengono superati. Non è necessario modificare o troncare il valore della casella di testo esistente. Questo è quello che devi usare. –
@Rashmi, ma questo non gestisce molti scenari. Come copia incolla, avvolgimento del testo ecc. –