Autres Généraliser un code (Texte par défaut dans des TextBox )

chaelie2015

XLDnaute Accro
Bonsoir Forum
j'ai un USF qui contient 10 TxtBox ( de TextBox2 ...Textbox11); je souhaite généraliser ce code dans toutes les TextBox.
VB:
Private Sub TextBox2_Enter()
If TextBox2.Text = "Saisir ICI le nom de l'ouvrage" Then TextBox2.Text = "": TextBox2.ForeColor = vbBlack
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox2.Text = "" Then TextBox2.Text = "Saisir ICI le nom de l'ouvrage": TextBox2.ForeColor = RGB(200, 200, 200)
End Sub

Private Sub UserForm_Initialize()
TextBox2.Text = "Saisir ICI le nom de l'ouvrage": TextBox2.ForeColor = RGB(200, 200, 200)
End Sub
Merci par avance
 

dysorthographie

XLDnaute Accro
Bonsoir,
Il est toujours possible d'utiliser un module de classe pour gérer tous les évènements si leurs comportements sont tous identique !
Code:
Private Sub TextBox2_Enter()
If TextBox2.Text = "Saisir ICI le nom de l'ouvrage" Then TextBox2.Text = "": TextBox2.ForeColor = vbBlack
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Init(TextBox2)
End Sub

Private Sub UserForm_Initialize()
For i=2 to 12
init(me.controls("Text" & l))
End Sub
Sub init(txt as objet)
With txt
If .Text ="" then
   .Text ="Saisir ICI le nom de l'ouvrage":      .ForeColor = RGB(200, 200, 200)
end if
End with
End sub
 

dysorthographie

XLDnaute Accro
dans le module de classe1
VB:
Public WithEvents TXT As MSForms.TextBox

Private Sub TXT_Enter()
If TXT.Text = "Saisir ICI le nom de l'ouvrage" Then TXT.Text = "": TXT.ForeColor = vbBlack
End Sub

Private Sub TXT_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TXT.Text = "" Then TXT.Text = "Saisir ICI le nom de l'ouvrage": TXT.ForeColor = RGB(200, 200, 200)
End Sub
Public Sub init()
With TXT
    If .Text = "" Then
       .Text = "Saisir ICI le nom de l'ouvrage":     .ForeColor = RGB(200, 200, 200)
    End If
End With
End Sub
dans le formulaire
VB:
Dim Txts(2 To 12) As New Classe1

Private Sub UserForm_Initialize()
For i = 2 To 12
  Set Txts(i).TXT = Me.Controls("TextBox" & i)
    Txts(i).init
Next
End Sub
 

patricktoulon

XLDnaute Barbatruc
bonsoir @dysortographie @chaelie2015

allons robert ;) ??????????????????
demo7.gif

depuis quand les events enter et exit sont pilotables par une classe control????????

c'est ça qui est bien regrettable justement dans un besoins comme celui ci c'est qu'une classe controls n'a pas accès au event enter et exit c'est bien dommage;)

je précise que bien que j'en soit sur j'ai testé tes codes
on peu cependant utiliser un autre events dans une classe mais ça n'aura pas la fonctionnalité complète de l'enter et l'exit et puis soyons fou faisons tout dans l'userform

un exemple

teste ceci dans un userform
VB:
Public WithEvents Txtb As MSForms.TextBox
Dim cls() As New UserForm1
Public oldcontrol As MSForms.TextBox

Private Sub Txtb_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Not UserForm1.oldcontrol Is Nothing Then
        If UserForm1.oldcontrol.Name <> Txtb.Name Then
            If UserForm1.oldcontrol.Text = "" Then UserForm1.oldcontrol.Text = "Saisir ICI le nom de l'ouvrage": UserForm1.oldcontrol.ForeColor = RGB(200, 200, 200)
        End If
    End If

    If Button = 1 Then
        If Txtb.Text = "Saisir ICI le nom de l'ouvrage" Then Txtb.Text = "": Txtb.ForeColor = vbBlack
        Set UserForm1.oldcontrol = UserForm1.Controls(Txtb.Name)
    End If
End Sub

Private Sub UserForm_Activate()
    For i = 1 To 10: X = X + 1
        ReDim Preserve cls(1 To X): Set cls(X).Txtb = Me.Controls("TextBox" & X)
        With Me.Controls("TextBox" & X): .Text = "Saisir ICI le nom de l'ouvrage": .ForeColor = RGB(200, 200, 200): End With
    Next

End Sub

Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   If Not oldcontrol Is Nothing Then If oldcontrol.Text = "" Then oldcontrol.Text = "Saisir ICI le nom de l'ouvrage": oldcontrol.ForeColor = RGB(200, 200, 200)
End Sub
 

patricktoulon

XLDnaute Barbatruc
tout les events qui ont a voir avec une éventuelle perte ou prise de focus et cela pour tout controls dans l'userform ne sont pas pilotables par une classe que ce soit dans un module classe ou intra userform comme je fait

cela concerne donc en premier lieu forcement le events
  1. enter
  2. exit
  3. BeforeDragOver
  4. BeforeDropOrPaste
  5. pour certains error aussi
je ne vais pas tous les énumérer mais certaines propriétés aussi manquent a l'appel dans une classe
comme par exemple l'acces au .tag ou .caption de l'userform par sa variable events dans la classe est impossible (déclenche meme une erreur mais j'ai un moyen de contourner)
et bien d'autre choses encore ;)
 

chaelie2015

XLDnaute Accro
bonsoir @dysortographie @chaelie2015

allons robert ;) ??????????????????
Regarde la pièce jointe 1090236
depuis quand les events enter et exit sont pilotables par une classe control????????

c'est ça qui est bien regrettable justement dans un besoins comme celui ci c'est qu'une classe controls n'a pas accès au event enter et exit c'est bien dommage;)

je précise que bien que j'en soit sur j'ai testé tes codes
on peu cependant utiliser un autre events dans une classe mais ça n'aura pas la fonctionnalité complète de l'enter et l'exit et puis soyons fou faisons tout dans l'userform

un exemple

teste ceci dans un userform
VB:
Public WithEvents Txtb As MSForms.TextBox
Dim cls() As New UserForm1
Public oldcontrol As MSForms.TextBox

Private Sub Txtb_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Not UserForm1.oldcontrol Is Nothing Then
        If UserForm1.oldcontrol.Name <> Txtb.Name Then
            If UserForm1.oldcontrol.Text = "" Then UserForm1.oldcontrol.Text = "Saisir ICI le nom de l'ouvrage": UserForm1.oldcontrol.ForeColor = RGB(200, 200, 200)
        End If
    End If

    If Button = 1 Then
        If Txtb.Text = "Saisir ICI le nom de l'ouvrage" Then Txtb.Text = "": Txtb.ForeColor = vbBlack
        Set UserForm1.oldcontrol = UserForm1.Controls(Txtb.Name)
    End If
End Sub

Private Sub UserForm_Activate()
    For i = 1 To 10: X = X + 1
        ReDim Preserve cls(1 To X): Set cls(X).Txtb = Me.Controls("TextBox" & X)
        With Me.Controls("TextBox" & X): .Text = "Saisir ICI le nom de l'ouvrage": .ForeColor = RGB(200, 200, 200): End With
    Next

End Sub

Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   If Not oldcontrol Is Nothing Then If oldcontrol.Text = "" Then oldcontrol.Text = "Saisir ICI le nom de l'ouvrage": oldcontrol.ForeColor = RGB(200, 200, 200)
End Sub
Bonjour patricktoulon
Merci pour la réponse c'est parfait.
a+
 

Discussions similaires

Statistiques des forums

Discussions
314 730
Messages
2 112 275
Membres
111 487
dernier inscrit
MBen