PDA

Visualizza la versione completa : [VB] Controllo anticipato del testo in un una TextBox()


w_t
09-05-2002, 13:33
Vorrei controllare mentre sto' scrivendo, se inserisco caratteri non validi, io ho creato questo codice:

PS. nel mio esempio il carattere non valido e' = ' @ '

--------------------------------------------
Private Sub txtEditSubCat_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtEditSubCat.TextChanged

Dim ItemControl As String = txtEditSubCat.Text
If ItemControl = "@" Then
Dim result As Integer = MessageBox.Show("E' stato inserito il carattere '@', verra sostituito con '_', vuoi proseguire?", "Attenzione!", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2)

If result = DialogResult.OK Then
Dim Item As String = Replace(ItemControl, "@", "_")
txtEditSubCat.Text = Item
End If
End If
End Sub
--------------------------------------------

Nel momento che inserisci il primo carattere, se e' una ' @ ', parte il messaggio, se dici ' OK ', elimina la ' @ ' e sostituisce con ' _ ', e te lo modifica subito pure nella TextBox().

Solo che funziona solo se il primo carattere e' una ' @ ', ma se il carattere non valido viene inserito per secondo in poi non lo controlla piu', dato il tipo di "Handles":

Handles txtEditSubCat.TextChanged che appunto e' un "TextChanged" ,

ho provato con altri Handles, ma niente

poi ho provato modificando pure il "System.EventArgs" in "System.Windows.Forms.KeyEventArgs" e usando altri Handles per la tastiera , ma niente.

Mi potete dire come fare per tenere attivo il controllo per tutta la durata della digitazione nella TextBox() ???

Boldan
09-05-2002, 16:02
Probabilmente stai usando VB.net che leggermente diverso dalla versione VB6 che uso io. Comunque ti mando questo esempio che dovrebbe aiutarti.
Al posto di gestire l'evento TextChange usa l'evento KeyPress. Tra i valori restituiti dovrebbe esserci il codice Ascii del tasto premuto.

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = Asc("@") Then
If MsgBox("Carattere non valido!!" & vbCrLf & "Lo vuoi sostituire con '_'?", vbYesNo, "ATTENZIONE:") = vbYes Then
KeyAscii = Asc("_")
Else
KeyAscii = vbNull
End If
End If
End Sub

Spero di averti aiutato, fammi sapere...
Ciao!! :)

darkblOOd
09-05-2002, 16:21
hai scritto troppo codice per i miei gusti :gren:



Private sub TEXTBOX_TextChanged ...
Dim str As String
str = textbox.Text
If str.IndexOf("@") <> -1 Then
MsgBox("cambio il valore")
textbox.Text = Replace(textbox.Text, "@", "_")
textbox.SelectionStart = textbox.TextLength
End If
end sub

w_t
09-05-2002, 16:43
Non funziona e non so come posso modificarlo, ho deciso di fare il controllo classico mel bottone di invio, grazie, ciao!

darkblOOd
09-05-2002, 16:50
COME NON FUNZIONA? :dott:

Da me funziona che una meraviglia, non che hai fatto copia e incolla anche dell'evento? Hai visto che ci sono i puntini? Manca la parte che ti genera l'ambiente di sviluppo

darkblOOd
09-05-2002, 16:53
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim str As String
str = TextBox1.Text
If str.IndexOf("@") <> -1 Then
MsgBox("cambio il valore")
TextBox1.Text = Replace(TextBox1.Text, "@", "_")
TextBox1.SelectionStart = TextBox1.TextLength
End If
End Sub


Impossibile che non ti funziona, controlla bene ! :ciauz:

w_t
09-05-2002, 16:56
Scusami!!!
sono rimasto indietro di un post, non dicevo a te!!!

E' vero funziona benissimo, grazie mille, usero questo, ancora grazie pure per Boldan!!!

w_t
09-05-2002, 17:02
Originariamente inviato da darkblOOd


Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim str As String
str = TextBox1.Text
If str.IndexOf("@") <> -1 Then
MsgBox("cambio il valore")
TextBox1.Text = Replace(TextBox1.Text, "@", "_")
TextBox1.SelectionStart = TextBox1.TextLength
End If
End Sub




E per fargli vagliare piu' caratteri???

"@, %, &, , ?, ", |, !, #, , ^, /, \, (, ), ;, :, ., , , , etc..."

con un bel codice compatto???

darkblOOd
09-05-2002, 17:03
puoi includere degli altri if then

biste
09-05-2002, 17:13
potresti anke fare il controllo sul keypress usando e.keycode mi pare e mettendo e.handled = true prima della fine della sub

:ciauz:

Loading