codice:
    Private Sub txt_dataInizioContratto_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_dataInizioContratto.KeyDown
        e.Handled = (e.KeyData = Keys.Back) Or (e.KeyData = Keys.Left) Or (e.KeyData = Keys.Delete) Or (e.KeyData = Keys.Home) 'ed eventuali altri tasti "scottanti"
    End Sub
Con VB.NET 2003 ho riscontrato tuttavia un problema con questa soluzione: sembrerebbe che se il tasto premuto è backspace VB.NET ignori la proprietà Handled e proceda comunque con la cancellazione del carattere.
Una possibile soluzione, che ha anche il vantaggio di mostrare graficamente che l'azione è da considerarsi vietata, può essere questa:
codice:
    Private Sub txt_dataInizioContratto_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_dataInizioContratto.KeyDown
        e.Handled = (e.KeyData = Keys.Back) Or (e.KeyData = Keys.Left) Or (e.KeyData = Keys.Delete) Or (e.KeyData = Keys.Home) 'ed eventuali altri tasti "scottanti"
        DirectCast(sender, TextBox).ReadOnly = e.Handled
    End Sub

    Private Sub txt_dataInizioContratto_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_dataInizioContratto.KeyUp
        DirectCast(sender, TextBox).ReadOnly = False
    End Sub