Textbox sélectif

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 539 fois - Téléchargée 18 fois

Contenu du snippet

Ceci est une source montrant
comment on peux faire des sélections
sur les caratères tapés dans un Textbox.
Dans la source le Textbox ne contiendra aucun 'a'
Mais on peux l'adapter pour ne mettre que des chiffres,
que des majuscules, ect...

Source / Exemple :


Public Class Form1

    Dim ok As Boolean = True ''Cette variable booléenne permet de faire que le code
    '' puisse changer le texte du Textbox1 sans que le code de la Sub 'lo' ne
    '' soit rapellée pendant qu'elle modifie le Text du textbox1

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

        '''''''''''''''''''''''''''''''''''''''''
        'If e.KeyChar = "a" Then e.Handled = True ''Cette ligne de code permet que 
        ''quand on tape un 'a', il ne se passe rien
        '''''''''''''''''''''''''''''''''''''''''

    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

        If ok Then lo() '' On appelle la Sub 'lo'

    End Sub

    Sub lo()
        Dim laselect As Integer = TextBox1.SelectionStart ''Mémorise l'emplacement du cureseur
        '' pour le restituer à la fin de l'opération

        Dim letext As String = TextBox1.Text '' On mémorise le text du Textbox1
        ''Avant de l'effacer

        Dim oubli As Integer = TextBox1.Text.Length ''Ensuite on déclare 'oubli' afin de 
        '' sauvegarder la longueur du Textbox1.text puisque on va l'effacer entièrement

        ok = False ''Ici on met 'ok' à false afin que la Sub 'lo' ne soit pas rapellée
        '' pendant l'opération...

        TextBox1.Text = "" '' On efface le Textbox1 

        For i = 0 To oubli - 1 '' Ici on remplis le Textbox1 avec toutes les lettres contenues
            '' dans le Text du Textbox1 qui a été sauvegardé dans la variable 'letext'

            If letext(i) <> "a" Then ''Ici, pendant le remplissage du Textbox1,
                '' on met une condition afin de ne pas remplir le Textbox1
                '' si la lettre est un 'a'

                TextBox1.Text = TextBox1.Text & letext(i) ''Ici on met les caractères le uns après les autres
                ''Dans le Textbox
            Else
                If laselect < oubli Then laselect -= 1 '' Si on a sauté le caratère 'a', alors on réduit
                '' la position du curseur de 1, ceci évite que le curseur avance de
                '' 1 cran si on tapes 'a' au milieu du Textbox
            End If
        Next

        ok = True ''Maintenant que le Textbox est rempli, on remet 'ok' à True puisque on
        '' ne va plus changer la propriété text du textbox

        TextBox1.SelectionStart = laselect '' Ici on positionne le curseur à l'emplacement
        ''sauvegardé, sinon il revient à la position 1

    End Sub

End Class

Conclusion :


J'ai fait ce code suite à la source
de Sinsitrus pour voir si il était possible
de faire ce type de programme sans utiliser
les Apis de Windows.
Peut être qu'il est plus judicieux
d'utiliser les Apis pour faire
ça, j'ai remarqué aussi que il était
possible qu'un 'a' apparaisse avant
que le code ai fini, cela peux
peut être remédié en activant la ligne
que j'ai mise dans l'évenement KeyPress.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
269
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
12 mars 2011

Salut,
oui c'est bien de ce control que je parle.
Donc j'ai essayé ton code et donc,
on peux plus coller avec CTRL+V mais toujours avec CTRL+INSERT...
Sinon ce n'était pas vraiment le but.
Alors oui effectivement le MaskedTextBox remplis ces fonctions,
alors donc on pourras peut être utiliser mon code
pour des fonctions autres telles que remplacement
d'un caractère par un autre ou certaines fonctions
que le MaskedTextBox ne supporte pas (?)
a+
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Pour le copier/collé il te peux aussi l'interdire, si tu veux utiliser que le keypress :

'interdit le coller
If e.KeyChar.Equals(Convert.ToChar(22)) Then e.Handled = True

Si vraiment y'en a besoin alors oui ton snippet peu le faire.
Sinon, tu parles de ce control ?
http://files.codes-sources.com/fichier.aspx?id=52000&f=TextBox%2fTextBox.ctl
Si oui : c'est du VB6, pas du .net !
C'est pas pareil, d'ailleur si tu regarde bien les control form du .Net tu y trouvera directement une Maskedtextbox toute préte ^^
Pour le futur il serait en tout cas plus simple de poster directement dans son fil de discussion ;)
slts.
Messages postés
269
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
12 mars 2011

Salut,
l'utilisation de TextChanged permet
l'utilisation de copier-coller à l'intérieur
du textbox. Cette source est en réponse
au code de Sinsitrus "Textbox Multifonction",
pour démontrer que on peux faire un textbox
'sélectif' sans utiliser les Apis de Windows.
Après, on peux évidemment adapter ma source
pour un peu tout, caratères numériques uniquement,
majuscules ect...
Maintenant est-ce que c'est mieux d'utiliser les Apis pour ça ?
Merci pour ton petit code je ne connaissait pas
cette méthode pour lire une variable string
caratère par caractère @+
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
salut, bon de ne vois pas du tout à quoi ce snippet. En gros ?
empécher de tapper le "a", ben comme tu le dis dans ta source :
If e.KeyChar "a" Then e.Handled True
Suffit à faire ce que fait ton code.
Tu peux d'ailleurs tester plein de choses avec !
Ex avec les chiffres (et la touche del)
Dim sAccept As String = "0123456789.," & Convert.ToChar(Keys.Back).ToString
For i As Integer = 0 To sAccept.Length - 1
If sAccept(i) = e.KeyChar Then
trucAfaire()
else
e.Handled = true
Exit For
End If
Next

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.