IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Changer le texte de combo box avec des variables


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 581
    Par défaut
    Si je comprends bien.
    1-RadioButtonG1 est checked => page1, l'utilisateur fait son choix dans les combobox
    2-Si on clique sur le RadioButtonG2 => page2, on sauvegarde le choix des combobox précédents (page1), et on met les valeurs sauvegardées pour cette page 2 (initialement, on pourrait dire "" et "" par exemple)
    3-Si on reclique sur RadioButtonG1 => page1, on sauvegarde le choix des combobox page2 et on met les valeurs sauvegardées de la page 1 (en 2)

    Il vaut mieux enregistrer le SelectedIndex et le remettre, le texte du combo n'est un bon choix: le texte change, mais l'index non (de mémoire), d'où le comportement que tu observe (si j'ai bien compris).

    Mais je ne suis pas sûr que ce soit la meilleur façon de gérer des pages, il vaut mieux utiliser des TabPages quitte à copier/coller les contrôles, comme ça pas besoin de gérer/mémoriser les choix au changement de page.

  2. #2
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Juillet 2020
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Juillet 2020
    Messages : 141
    Par défaut
    "1-RadioButtonG1 est checked => page1, l'utilisateur fait son choix dans les combobox"
    Oui, c'est ça

    "2-Si on clique sur le RadioButtonG2 => page2, on sauvegarde le choix des combobox précédents (page1), et on met les valeurs sauvegardées pour cette page 2 (initialement, on pourrait dire "" et "" par exemple)
    3-Si on reclique sur RadioButtonG1 => page1, on sauvegarde le choix des combobox page2 et on met les valeurs sauvegardées de la page 1 (en 2)"
    exactement,

    "Il vaut mieux enregistrer le SelectedIndex et le remettre, le texte du combo n'est un bon choix: le texte change, mais l'index non (de mémoire), d'où le comportement que tu observe (si j'ai bien compris).

    Mais je ne suis pas sûr que ce soit la meilleur façon de gérer des pages, il vaut mieux utiliser des TabPages quitte à copier/coller les contrôles, comme ça pas besoin de gérer/mémoriser les choix au changement de page."

    Cela fonctionne aussi "avec le même problème" avec SelectIndex ou "item" avec cette méthode l'utilisateur n'a pas la possibilité de nommer comme il le souhaite une nouvelle entrée dans les Combobox S1COMBO ou S2COMBO
    Pour les TabPages, je les utilise déja pour d'autres données.

  3. #3
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    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 :
    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
    C'est le même code mais en 3 procédures événementielles au lieu d'être regroupé dans une seule.

    Il y existe un autre moyen, je chercherai demain si j'ai le temps.

    ...

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Je te propose d'examiner cette solution avec CheckBox. Elle n'est pas de programmation optimale, mais elle permet de comprendre ce qu'on fait

    Voici mon projet de test pour que tu puisses travailler directement dessus : Tempus.zip

    Voici le code et l'illustration du Form :

    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
    Public Class Form1
     
        Dim EchangeDemande As Integer ' 0 = aucun, 1 = CB1 vers CB2; 2 = CB2 vers CB1
     
        ' Pour connaitre ce que veux l'utilisateur, définir EchangeDemande
        Private Sub CHKBox_Click(sender As Object, e As EventArgs) Handles CHK_1.Click, CHK_2.Click
            Dim CHK As String = sender.Name
            Select Case CHK
                Case "CHK_1"
                    If CHK_1.Checked Then
                        CHK_2.Checked = False
                  End If
                    EchangeDemande = 1
                Case "CHK_2"
                    If CHK_2.Checked Then
                        CHK_1.Checked = False
                   End If
                    EchangeDemande = 2
                Case Else
                    EchangeDemande = 0
            End Select
        End Sub
     
        Private Sub S1COMBO_SelectedIndexChanged(sender As Object, e As EventArgs) Handles S1COMBO.SelectedIndexChanged
            Select Case EchangeDemande
                Case 0 ' Ne rien faire
                Case 1 ' CB1 vers CB2
                    S2COMBO.Text = S1COMBO.Text
                Case 2 ' CB2 vers CB1
                    ' Sans doute pas de sens à partir de CB1, mais s'il le fallait, ce serait :
                    ' S1COMBO.Text = S2COMBO.Text
            End Select
        End Sub
     
        Private Sub S2COMBO_SelectedIndexChanged(sender As Object, e As EventArgs) Handles S2COMBO.SelectedIndexChanged
            Select Case EchangeDemande
                Case 0 ' Ne rien faire
                Case 1 ' CB1 vers CB2
                    ' Sans doute pas de sens à partir de CB1, mais s'il le fallait, ce serait :
                    ' S2COMBO.Text = S1COMBO.Text
                Case 2 ' CB2 vers CB1
                    S1COMBO.Text = S2COMBO.Text
            End Select
        End Sub
     
        ' Jeu de test
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            '   Valeurs test dans les Combo
            S1COMBO.Items.Add("S1COMBO_Orig_1")
            S1COMBO.Items.Add("S1COMBO_Orig_2")
            S1COMBO.Items.Add("S1COMBO_Orig_3")
            S2COMBO.Items.Add("S2COMBO_Orig_1")
            S2COMBO.Items.Add("S2COMBO_Orig_2")
            S2COMBO.Items.Add("S2COMBO_Orig_3")
            S1COMBO.SelectedText = S1COMBO.Items(0)
            S2COMBO.SelectedText = S2COMBO.Items(0)
        End Sub
     
    End Class
    Nom : Tempus.jpg
Affichages : 112
Taille : 31,3 Ko

    Dernière minute : je viens de lire ... Il s'agit donc de TabPage ... , mais ça ne change rien à la logique des choix et sélections de l'utilisateur.

    Après dernière minute : il faut enlever les 2 références à CHK_3 dans mon code, ce CHK n'existe pas.

  5. #5
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Une idée qui m'est venue pendant la nuit ...

    Elle vient sans doute trop tard si ton projet est abouti et subit seulement quelques améliorations. Mais si ce projet est en cours d'élaboration, cela vaut la peine de penser au DataTable.

    Voilà, je suppose que tous les ComboBox concernés par ta question contiennent la même liste de données. Simplement, tu veux que la sélection dans un des Combos, sur l'une des pages, soit aussi la sélection "par défaut" d'un autre Combo, sur une autre page.
    S'il en est bien ainsi, le DataTable apporterait une grande facilité, il n'y aurait aucun besoin d'affecter "manuellement" le Combo de destination. Il suffirait que tous ces Combos présentant le même jeu de données soient liés à un même DataTable, celui contenant ces données. La sélection d'une donnée dans un des Combos la sélectionnerait automatiquement dans tous les Combo.

    Le DataTable "rempli" avec les données, la liaison aux Combos se fait par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    S1COMBO.DataSource = LeDataTable
    S2COMBO.DataSource = LeDataTable
    S3COMBO.DataSource = LeDataTable
    ' ... ... ...
    ...

  6. #6
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Juillet 2020
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Juillet 2020
    Messages : 141
    Par défaut
    Bonjour Phil Rob,

    Le Select Case est une très bonne idée, cela va réduire un peut le code.

    "Elle vient sans doute trop tard si ton projet est abouti et subit seulement quelques améliorations"
    Oui, le projet est "normalement" terminé, mais il arrive que des l'utilisateurs demandent des améliorations

    Voilà, je suppose que tous les ComboBox concernés par ta question contiennent la même liste de données"
    Non, le Form contient d'autres Combo avec des listes différentes et pour la plupart l'utilisateur à la possibilité de rentrer des données qui sont hors de la liste initial.

    Sinon, cette nuit j'ai compris d'où venait le problème, sous les RadioButton ou "autres" il ne faut mettre que ce qui le concerne, et là les variables sont bien prisent en compte, mais maintenant j'ai un autre problème qui est apparu, le texte que l'utilisateur renseigne dans les combos ne s'enregistre plus dans la variable, cela fait apparaitre la 1er entrée de la liste à la place....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Private Sub RadioButtonG1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButtonG1.CheckedChanged
     
            If RadioButtonG1.Checked = True Then
                S1COMBO.Text = S1COMBOG1
                S2COMBO.Text = S2COMBOG1
            End If
    End Sub
     
      Private Sub RadioButtonG2_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButtonG2.CheckedChanged
                   If RadioButtonG2.Checked = True Then
                S1COMBO.Text = S1COMBOG2
                S2COMBO.Text = S2COMBOG2
            End If
    End Sub
    je vais maintenant incorporer le Select Case dans le code, et je verrais pour l'autre problème après.

    Un grand merci à toi Phil Rob comme d'habitude tes réponses sont d'une grande aide

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 581
    Par défaut
    Dans ton code, tu ne sauvegardes pas les données des combobox avant de les modifier.

  8. #8
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Juillet 2020
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Juillet 2020
    Messages : 141
    Par défaut
    Citation Envoyé par umfred Voir le message
    Dans ton code, tu ne sauvegardes pas les données des combobox avant de les modifier.
    elles sont stockées dans des variables et les données sont rappelées à la demande de l'utilisateur

  9. #9
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bien bien ...

    Puisque tu as trouvé le problème qui t'encombrait, je te laisse ...

    Mais j'insiste sur un détail. L'usage des RadioButton pour cette gestion est un "supplice" intellectuel, en tout cas avec l'événement CheckChanged.
    Un seul CheckBox (Coché = je passe la valeur à l'autre page, Non coché = je NE passe PAS la valeur à l'autre page) doit suffire.
    Selon ce raisonnement, un seul RadioButton doit suffire également.

    S'il y a plusieurs RadioButton, il y a "supplice", parce que dans ton code tu as besoin d'un seul événement pour t'indiquer s'il faut passer ou non le texte du Combo.
    Or avec plusieurs RadioButton, tu as toujours 2 événements CheckChanged et nous nous y mêlons les pieds. Quand tu Check un Radio, il produit d'abord la Dé-Check du précédent avant son propre Check. Il y a donc 2 CheckChanged.
    Cet inconvénient n'existe pas avec l'événement Click, par exemple.

    ...

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 581
    Par défaut
    c'est un faux problème, tu vérifies juste qu'il est checked ou/et unchecked selon le besoin.

  11. #11
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Juillet 2020
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Juillet 2020
    Messages : 141
    Par défaut
    Citation Envoyé par Phil Rob Voir le message
    Bien bien ...

    Puisque tu as trouvé le problème qui t'encombrait, je te laisse ...

    Mais j'insiste sur un détail. L'usage des RadioButton pour cette gestion est un "supplice" intellectuel, en tout cas avec l'événement CheckChanged.
    Un seul CheckBox (Coché = je passe la valeur à l'autre page, Non coché = je NE passe PAS la valeur à l'autre page) doit suffire.
    Selon ce raisonnement, un seul RadioButton doit suffire également.

    S'il y a plusieurs RadioButton, il y a "supplice", parce que dans ton code tu as besoin d'un seul événement pour t'indiquer s'il faut passer ou non le texte du Combo.
    Or avec plusieurs RadioButton, tu as toujours 2 événements CheckChanged et nous nous y mêlons les pieds. Quand tu Check un Radio, il produit d'abord la Dé-Check du précédent avant son propre Check. Il y a donc 2 CheckChanged.
    Cet inconvénient n'existe pas avec l'événement Click, par exemple.

    ...
    Après avoir fait le point avec les utilisateurs, il faut maintenant 8 pages "donc 8 lots de variables", c'est maintenant que le casse tête commence....

  12. #12
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    @umfred
    N'empêche que tu entres dans plusieurs procédures événementielles là où une seule devrait suffire. Ce n'est pas un faux problème pour tout le monde et c'est toujours un traitement redondant.
    ...

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 581
    Par défaut
    Citation Envoyé par Phil Rob Voir le message
    @umfred
    N'empêche que tu entres dans plusieurs procédures événementielles là où une seule devrait suffire. Ce n'est pas un faux problème pour tout le monde et c'est toujours un traitement redondant.
    ...
    pas obligatoirement, tous les événements peuvent se dirigés vers la même fonction, et avec la "magie" du sender savoir quel contrôle est l'appelant que tu gères à coup de Select Case par exemple.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/12/2016, 15h47
  2. remplir combo box avec liste des pays
    Par ygeeg dans le forum Windows Forms
    Réponses: 0
    Dernier message: 19/02/2010, 16h20
  3. Problème de combo box avec additem
    Par Mariquiqui dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/04/2008, 19h25
  4. Formatage d'un texte flash avec des variables PHP
    Par renaud26 dans le forum Flash
    Réponses: 6
    Dernier message: 01/10/2007, 16h31
  5. [C#] Message box avec des boutons diff.
    Par BoOom dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/04/2006, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo