Voilà les codes:
CLASSE:
Code : Sélectionner tout - Visualiser dans une fenêtre à part DFRAME
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 '// DynamicTextBox '// Classe encapsulant un textbox Option Explicit Private Form As UserForm '// reference vers le formulaire parent Private WithEvents Frame As MSForms.Frame '// instance du textbox '// On oublie pas le mot clef WithEvents pour pouvoir ecrire les gestionnaires d'evennement '// pseudo-constructeur (pour nous faciliter la vie) Public Sub FrCreate(ByRef Form As UserForm, ByVal FrName As String, FrTop As Long, ByVal FrWidth As Long, ByVal frHeight As Long) '// creation et positionnement du textbox Set Frame = Form.Controls.Add("Forms.Frame.1", FrName, True) Frame.Top = FrTop Frame.Width = FrWidth Frame.Height = frHeight End Sub '// gestionnaires d'evennements du textbox 'Private Sub TextBox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) ' MsgBox "You clicked on " & TextBox.Name 'End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part DynamicTextBoxModules cassiques
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 '// DynamicTextBox Public CADRE As String '// Classe encapsulant un textbox 'Option Explicit Private Form As UserForm '// reference vers le formulaire parent Private WithEvents TextBox As MSForms.TextBox '// instance du textbox '// On oublie pas le mot clef WithEvents pour pouvoir ecrire les gestionnaires d'evennement '// pseudo-constructeur (pour nous faciliter la vie) Public Sub TxCreate(ByRef Form As UserForm, ByVal FrName As String, ByVal TxName As String, TxTop As Long, ByVal TxWidth As Long, ByVal TxHeight As Long) '// creation et positionnement du textbox MsgBox CADRE Set TextBox = Form.Controls(CADRE).Controls.Add("Forms.TextBox.1", TxName, True) TextBox.Top = TxTop TextBox.Width = TxWidth TextBox.Height = TxHeight End Sub '// gestionnaires d'evennements du textbox Private Sub TextBox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) MsgBox "You clicked on " & TextBox.Name End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part Factory
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 '// Module Factory 'Option Explicit Public CADRE As String Public Function FrCreate_Frame(ByRef Form As UserForm, ByVal FrName As String, ByVal FrTop As Long, ByVal FrWidth As Long, ByVal frHeight As Long) As DFrame Dim Frame As DFrame Set Frame = New DFrame FrName = CADRE Frame.FrCreate Form, FrName, FrTop, FrWidth, frHeight Set FrCreate_Frame = Frame End Function '// Fonction qui encapsule l'instanciation de la classe DynamicBox Public Function TxCreate_TextBox(ByRef Form As UserForm, ByVal FrName As String, ByVal TxName As String, ByVal TxTop As Long, ByVal TxWidth As Long, ByVal TxHeight As Long) As DynamicTextBox MsgBox CADRE Dim TextBox As DynamicTextBox Set TextBox = New DynamicTextBox TextBox.TxCreate Form, FrName, TxName, TxTop, TxWidth, TxHeight Set TxCreate_TextBox = TextBox End Function
USERFORM
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 '// UserForm UserForm1 'Option Explicit Public CADRE As String Private Textboxes As Collection '// collection pour ranger les textbox Private Frams As Collection '// collection pour ranger les textbox Public Sub UserForm_Initialize() Userform8.Show 0 Set Textboxes = New Collection Set Frams = New Collection '// Ajoute 3 textbox dynamiques et les range dans une collection Dim i As Integer For i = 0 To 2 Dim TextBox As DynamicTextBox, Frame As DFrame CADRE = "MyFrame" & i + 3 Set Frame = Factory.FrCreate_Frame(Me, CADRE, i * 20, 80, 80) Frams.Add Frame ' Next i MsgBox CADRE ' For j = 0 To 2 'Form.Controls(CADRE).Controls.Add Set TextBox = Factory.TxCreate_TextBox(Me, CADRE, "MyTextBox" & i, i * 20, 20, 20) Textboxes.Add TextBox Next i End Sub Private Sub UserForm_Click() End Sub
Donc le problème que j'ai:
J'ai déjà deux frame dans mon userform, j'essaie de différencier en passant parpour aller chercher le troisième cadre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part CADRE = "MyFrame" & i + 3mais la valeur de
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set TextBox = Form.Controls(CADRE).Controls.Add("Forms.TextBox.1", TxName, True)ne suit pas les passages de code et dans
Code : Sélectionner tout - Visualiser dans une fenêtre à part CADRE
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set TextBox = Form.Controls(CADRE).Controls.Add("Forms.TextBox.1", TxName, True)= "" et la textobox s'intègre dansmon frame n°1......pas dans le frame n°3
Code : Sélectionner tout - Visualiser dans une fenêtre à part CADRE
Partager