Si le passage d'une page à l'autre se fait par le click de l'onglet, ce click d'onglet désigne la page cible, et donc aussi le Combo cible.
Un indicateur quelconque (RadioButton ou autre) devrait seulement informer s'il faut transférer le texte du Combo. On a alors une seule donnée à passer d'un seul Combo vers un seul autre. Vu ainsi, quel que soit le nombre de cibles possibles, une seule existe au moment du click d'un onglet. Une seule variable pour tout est déjà beaucoup.
....
.
Je continue de penser que si n pages, le mieux est d'utiliser des TabPages ou des panels avec chacun leurs contrôles. et si les pages sont identiques en terme de présentation, c'est l'occasion d'en faire un contrôle utilisateur à proprement parlé
@umfred
C'est bien la magie dont tu parles que j'ai utilisé dans mon code CHKBox_Click envoyé hier. Mais avec l'événement CheclChanged, l'exécution passera 2 fois dans la procédure alors su'elle passerait seulement 1 fois avec l'événement Click.
Je sens bien que nous ne serons pas d'accord sur ce détail mais peu importe, les 2 approches se valent pour qui peut les maitriser.
Tu parles d'utilser des TabPages. C'est une excellente idée, je croyais que c'était déjà de cela qu'il s'agissait. Pourquoi n'envoie tu pas un petit projet de tests ?
Bon, voici un projet de test dans lequel j'utilise des TabPages comme le suggère Umfred, et bien entendu fidèle à mes convictions, un CheckBox et une seule variable de passage.
Le nombre de TabPage est sans importance, simplement le code s'allongera. Il conviendrait de passer à une écriture moins didactique (et donc moins lisible) de l'algorithme.
Une petite vidéo pour voir comment ça marche : TempusVideo.zip
Et le projet de test pour t'amuser un peu : Tempus2.zip
...![]()
Avec des tabpages, plus besoin d'avoir de checkbox/radiobutton pour changer de page.
Pour faire vite, tu peux remplacer la Procédure Private Sub CHKBox_Click(sender As Object, e As EventArgs) Handles CHK1.Click, CHK2.Click, CHK3.Clickpar les 3 suivantes :
C'est le même code mais en 3 procédures événementielles au lieu d'être regroupé dans une seule.
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 Private Sub CHK1_Click(sender As Object, e As EventArgs) Handles CHK1.Click ' Nous sommes en Page 1 If CHK1.Checked Then TextAPasser = Combo1.Text Else TextAPasser = String.Empty End If End Sub Private Sub CHK2_Click(sender As Object, e As EventArgs) Handles CHK2.Click ' Nous sommes en Page 2 If CHK2.Checked Then TextAPasser = Combo2.Text Else TextAPasser = String.Empty End If End Sub Private Sub CHK3_Click(sender As Object, e As EventArgs) Handles CHK3.Click ' Nous sommes en Page 3 If CHK3.Checked Then TextAPasser = Combo3.Text Else TextAPasser = String.Empty End If End Sub
Il y existe un autre moyen, je chercherai demain si j'ai le temps.
...
J'aurais mal dormi si je ne te donnais pas la bonne écriture tout de suite. De plus, Option Strict On doit te donner des erreurs aussi sur les 3 dernière lignes du Form_Load.
Voici le code complet corrigé (et un peu amélioré) :
...
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 Option Explicit On Option Strict On Public Class Form1 Dim TextAPasser As String = String.Empty Private Sub CHKBox_Click(sender As Object, e As EventArgs) Handles CHK1.Click, CHK2.Click, CHK3.Click Dim CHK As CheckBox = CType(sender, CheckBox) TextAPasser = String.Empty Select Case CHK.Name Case "CHK1" ' Nous sommes en Page 1 If CHK1.Checked Then TextAPasser = Combo1.Text End If Case "CHK2" ' Nous sommes en Page 2 If CHK2.Checked Then TextAPasser = Combo2.Text End If Case "CHK3" ' Nous sommes en Page 3 If CHK3.Checked Then TextAPasser = Combo3.Text End If End Select End Sub Private Sub TabControl1_Click(sender As Object, e As EventArgs) Handles TabControl1.Click Dim TextPage As String = TabControl1.SelectedTab.Text Select Case TextPage Case "TabPage1" ' Nous sommes entré en Page 1 If Not TextAPasser = String.Empty Then Combo1.Text = TextAPasser End If Case "TabPage2" ' Nous sommes entré en Page 2 If Not TextAPasser = String.Empty Then Combo2.Text = TextAPasser End If Case "TabPage3" ' Nous sommes entré en Page 3 If Not TextAPasser = String.Empty Then Combo3.Text = TextAPasser End If End Select 'Vider TextAPasser pour ne pas poluer les autres TabPages TextAPasser = String.Empty End Sub ' Jeu de test Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Valeurs test dans les Combo Combo1.Items.Add("Test_1_1") Combo1.Items.Add("Test_1_2") Combo1.Items.Add("Test_1_3") Combo2.Items.Add("Test_2_1") Combo2.Items.Add("Test_2_2") Combo2.Items.Add("Test_2_3") Combo3.Items.Add("Test_3_1") Combo3.Items.Add("Test_3_2") Combo3.Items.Add("Test_3_3") Combo1.Text = Combo1.Items(0).ToString Combo2.Text = Combo2.Items(0).ToString Combo3.Text = Combo3.Items(0).ToString End Sub End Class![]()
Je répète ce que je disais (sauf si ma compréhension initiale était mauvaise): on ne passe aucun information d'une page à l'autre, on veut en revanche conserver l'info sur chacune des pages, donc avec des tabpages, il n'y a besoin de rien (sauf dupliquer les contrôles).
Dans ton code @Phil Robl, si on modifie en page 1, on coche la case, le texte est récupéré; on va sur l'onglet2, le texte est recopié. on modifie le choix du combo, on coche la case, on revient sur l'onglet 1 et hop, on a récupéré le choix de l'onglet 2 (je ne pense pas que c'est le but)
Partager