Textbox "virtuels" ( controls.add ) avec gestion d'evenements keypress

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 936 fois - Téléchargée 36 fois

Contenu du snippet

Code a insérer dans n'importe quel Formulaire.
Permet de gérer l'évènement Keypress de zones de texte qui initialement n'existent pas et sont crées via la commande Controls.Add !

Source / Exemple :


' tout en code !

Option Explicit
Dim x As Byte
Dim nom_obj(6) As Object
Dim nom_obj_txt
'

Private Sub Form_Activate()
Me.KeyPreview = True
nom_obj_txt = Array("z0", "z1", "z2", "z3", "z4", "z5") ' nom des objets textbox 'virtuels'
For x = 0 To 5
    Set nom_obj(x) = Me.Controls.Add("VB.textbox", "z" & x, Me)  
   ' creation de 5 zones de texte "z0", "z1", "z2","z3","z4","z5"
    With nom_obj(x) ' définition des propriétés
        If x > 2 Then
            .Text = "Ajout routine zone texte n°" & x
        Else
            .Text = "Ajout routine zone texte n°" & x & "  - Supression appui touches alphabétiques"
        End If
        .MaxLength = 255
        .Tag = nom_obj(x).Name
        .Top = (1000 * x) + 500
        .Left = 1000
        .Visible = True
        .Width = 5000
        .Enabled = True
        .Locked = False
        ' etc........
    End With
Next x
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
' teste les evenements Keypress sur les champs z0,z1,z2
' pour info créer un évenement Private Sub z0_keypress(KeyAscii As Integer) ne fonctionne pas.. pour VB, le champ z0 n'existe pas
' et on ne peut pas ecrire Private Sub controls("z0")_Keypress(KeyAscii As Integer)

For x = 0 To 2 ' supression appui touches alpha sur champs "z0","z1","z2"
    If Me.ActiveControl.Tag = nom_obj_txt(x) Then KeyAscii = suppr_lettre(KeyAscii)
Next x
End Sub

Public Function suppr_lettre(Key) As Integer   ' suppression des lettres
If (Key < Asc(0) Or Key > Asc(9)) And Key <> 8 Then
    suppr_lettre = 0
Else
    suppr_lettre = Key
End If
End Function

A voir également

Ajouter un commentaire

Commentaires

Messages postés
276
Date d'inscription
dimanche 22 juillet 2001
Statut
Modérateur
Dernière intervention
5 décembre 2013

Monsieur l'as du VB qui refais le vb lui-même documentes-toi, et essayes ça :

Dim WithEvents ctlDynamic As VBControlExtender

Private Sub ctlDynamic_ObjectEvent(Info As EventInfo)
' test for the click event of the TreeView
If Info.Name = "Click" Then
MsgBox "You clicked " & ctlDynamic.Name
End If
End Sub

Private Sub Form_Load()
Set ctlDynamic = Controls.Add("VB.TextBox", _
"myctl", Form1)
ctlDynamic.move 0, 45, 1500, 300
ctlDynamic.Visible = True
End Sub

Sur ce , avant de poster une source, ou prendre un temps fou à coder comme un boeu, t'as le forum, prends le temps de sonder, demandes aux gens, vas sur google, bréf essayes de te documenter...

Ce code est justement fait pour VB6 au passage, donc creanaud76 avais raison.

Bonne prog à vous tous ;), akh
Messages postés
6
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
31 août 2004

Tu te trompes

VB (version 6 en tout cas) ne gère absolument pas les évenements des objet crées dynamiquement.

par exemple:
Si tu créés dynamiquement une zone de texte "txtInput" via :

Set txtInput=me.Controls.Add("VB.TextBox","txtInput",me)

faut même pas espérer que l'évenement Keypress du textbox....

Private Sub txtInput_KeyPress(KeyAscii As Integer)
End sub

....soit pris en compte
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
23
Je ne vois vraiment pas ou tu veux en venir avec ce code ! Tu simules un evt Keypress pour un controle dynamiquement créé !! Tu sais que Vb le fait nativement !!

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.