Bonjour,
je rencontre quelques difficultés pour faire la chose suivante :
J'ai une série de Checkbox et de label, dans des panel différents, mais liés par leur nom :
Les panels
- SMCV_Cadre1
- SMCV_Cadre2
Les checkbox
* Dans le premier panel
- Chkb_SMCV1_1
- Chkb_SMCV1_2
- Chkb_SMCV1_3
* Dans le 2ème panel
- Chkb_SMCV2_1
- Chkb_SMCV2_2
- Chkb_SMCV2_3
Les label
- lbl_SMCV1_11 (premier label lié au panel SMCV_Cadre1 et checkbox Chkb_SMCV1_1)
- lbl_SMCV1_12 (deuxième label lié au panel SMCV_Cadre1 et checkbox Chkb_SMCV1_1)
- lbl_SMCV1_21 (premier label lié au panel SMCV_Cadre1 et checkbox Chkb_SMCV1_2)
- lbl_SMCV1_22 (deuxième label lié au panel SMCV_Cadre1 et checkbox Chkb_SMCV1_2)
- lbl_SMCV1_31 (premier label lié au panel SMCV_Cadre1 et checkbox Chkb_SMCV1_3)
- lbl_SMCV1_32 (deuxième label lié au panel SMCV_Cadre1 et checkbox Chkb_SMCV1_3)
- lbl_SMCV2_11 (premier label lié au panel SMCV_Cadre2 et checkbox Chkb_SMCV2_1)
- lbl_SMCV2_12 (deuxième label lié au panel SMCV_Cadre2 et checkbox Chkb_SMCV2_1)
- etc...
Aujourd'hui j'ai 2 fonctions (1 pour chaque panel) qui fonctionnent et qui sont handle par les checkchanged des checkbox et qui vont changer la couleur de label associé
Fonction 1 :
Fonction 2:
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 'Private Sub CkB_SMCV1_CheckedChanged(sender As Object, e As EventArgs) Handles CkB_SMCV1_1.CheckedChanged, CkB_SMCV1_2.CheckedChanged, CkB_SMCV1_3.CheckedChanged Dim NumChk As String = Mid(sender.Name, 11, 1) Dim control As Control Dim lbl As Label For Each control In Me.SMCV_Cadre1.Controls If TypeOf control Is Label Then lbl = control If sender.checked = True And NumChk = Mid(lbl.Name, 11, 1) Then lbl.ForeColor = Color.Red Else If sender.checked = False And NumChk = Mid(lbl.Name, 11, 1) Then lbl.ForeColor = Color.Black End If End If End If Next End Sub
Mon souci c'est que je vais avoir de plus en plus de panel à créer avec tout autant de checkbox et de label.
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 Private Sub CkB_SMCV2_CheckedChanged(sender As Object, e As EventArgs) Handles CkB_SMCV2_1.CheckedChanged, CkB_SMCV2_2.CheckedChanged, CkB_SMCV2_3.CheckedChanged Dim NumChk As String = Mid(sender.Name, 11, 1) Dim control As Control Dim lbl As Label For Each control In Me.SMCV_Cadre2.Controls If TypeOf control Is Label Then lbl = control If sender.checked = True And NumChk = Mid(lbl.Name, 11, 1) Then lbl.ForeColor = Color.Red Else If sender.checked = False And NumChk = Mid(lbl.Name, 11, 1) Then lbl.ForeColor = Color.Black End If End If End If Next End Sub
Donc je peux éventuellement créer tout autant de fonctions , mais je me disais qu'il pouvait être judicieux de créer un module fonction et gérer l'appel dans ma form comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub CkB_SMCV1_CheckedChanged(sender As Object, e As EventArgs) Handles CkB_SMCV1_1.CheckedChanged, CkB_SMCV1_2.CheckedChanged, CkB_SMCV1_3.CheckedChanged, CkB_SMCV1_4.CheckedChanged, CkB_SMCV1_5.CheckedChanged, CkB_SMCV1_6.CheckedChanged, CkB_SMCV1_7.CheckedChanged Dim NumChk As Integer = Mid(sender.Name, 11, 1) Dim NumCadre As Integer = Mid(sender.name, 9, 1) Dim NomCadre As String = Mid(sender.name, 5, 4) ColorNote(sender, NomCadre, NumCadre, NumChk) End Sub
Puis J'ai créé le module suivant :
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 Module Mod_Fonctions Public control As Control Public lbl As Label Public Chkb As CheckBox Public SelectCadre As String Sub ColorNote(sender As Object, NomCadre As String, NumCadre As Integer, NumChk As Integer) Dim ObjetCadre As Object ObjetCadre.name = NomCadre & "_Cadre" & NumCadre For Each control In ObjetCadre.control If TypeOf control Is Label Then lbl = control If sender.checked = True And NumChk = Mid(lbl.Name, 11, 1) Then lbl.ForeColor = Color.Red 'en gras : lbl.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold) Else If sender.checked = False And NumChk = Mid(lbl.Name, 11, 1) Then lbl.ForeColor = Color.Black End If End If End If Next End Sub End Module
Et c'est la que je coince.
Il faut que ma fonction dans mon module détermine le nom du cadre dans lequel il va chercher les noms de label et changer leur couleur.
Auriez vous des pistes ?
Merci d'avance
Partager