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

Windows Forms Discussion :

[VB.NET] Recherche de la bonne pratique pour une suite d'écran "step by step"


Sujet :

Windows Forms

  1. #1
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut [VB.NET] Recherche de la bonne pratique pour une suite d'écran "step by step"
    Hello,

    Tout est dans le titre ou presque.

    Je recherche la bonne manière de faire pour pouvoir créer un genre d'assistant avec des écrans d'un processus d'encodage qui guideraient l'utilisateur pas à pas à travers les différentes étapes.

    Ce que je cherche à arriver à faire est donc ceci en résumé :

    1. on démarre d'un écran X où on clique sur un bouton qui démarre l'assistant.
    2. l'écran 1 de l'assistant s'affiche en modal, on encode et on clique sur suivant
    3. l'écran 1 est masqué et l'écran 2 de l'assistant s'affiche en modal, on encode et on clique sur suivant
    4. ...
    5. on arrive sur l'écran récapitulatif sur lequel on peut vérifier nos données et les valider pour terminer (ce qui ferme l'écran récapitulatif et redonne l'accès à l'écran x).


    A chaque étape de l'assistant, il est possible de cliquer sur précédent pour revenir à l'étape précédente et modifier nos données.

    Pour le moment, j'ai un code ressemblant à ceci :
    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
    Public Class frmStep2Demo
     
        Public step1 As frmStep1Demo
        Public step3 As frmStep3Demo
     
        Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
            If step3 Is Nothing Then
                step3 = New frmStep3Demo
                step3.step2 = Me
                Me.Hide()
                step3.ShowDialog()
            Else
                Me.Hide()
                step3.Show()
            End If
        End Sub
     
        Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click
            step1.step2 = Me
            Me.Hide()
            step1.Show()
        End Sub
     
        Private Sub frmStep2Demo_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
            step1.Close()
        End Sub
    End Class
    Mais ça part en couille car en jouant un peu avec les boutons suivants et précédent, je peux facilement regagner l'accès à l'écran x. Je fais donc forcément quelque chose de travers mais je ne comprends pas quoi.

    Quelqu'un pourrait-il me mettre sur la bonne voie ???
    Kropernic

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Salut,

    C'est dans ton step1 qu'il faudrait interdire de revenir sur l'écran x

    Mais perso, j'utiliserai une autre approche.
    Je ne mettrais aucun code d'enchaînement des fenêtres en elle même, cela permettra une meilleure évolution.

    Il suffit d'utiliser un dictionnaire de fenêtre, et la fenêtre principale x gére l'enchaînement des écrans d'assistances.

    Un exemple :
    Les fenêtres d'assistance et saisies, et la classe de données.
    Code vb.net : 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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Public Class frmQuestion1
     
        Public Property Data As clsData = New clsData
     
        Sub New(ByRef d As clsData)
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Data = d
        End Sub
     
        ' sub de mise à jour des data
     
        Private Sub btnSuivant_Click(sender As System.Object, e As System.EventArgs) Handles btnSuivant.Click
            DialogResult = Windows.Forms.DialogResult.OK
            Close()
        End Sub
        Private Sub btnPrecedant_Click(sender As System.Object, e As System.EventArgs) Handles btnPrecedant.Click
            DialogResult = Windows.Forms.DialogResult.Cancel
            Close()
        End Sub
     
    End Class
     
    Public Class frmQuestion2
     
        Public Property Data As clsData = New clsData
     
        Sub New(ByRef d As clsData)
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Data = d
        End Sub
     
        ' sub de mise à jour des data
     
        Private Sub btnSuivant_Click(sender As System.Object, e As System.EventArgs) Handles btnSuivant.Click
            DialogResult = Windows.Forms.DialogResult.OK
            Close()
        End Sub
        Private Sub btnPrecedant_Click(sender As System.Object, e As System.EventArgs) Handles btnPrecedant.Click
            DialogResult = Windows.Forms.DialogResult.Cancel
            Close()
        End Sub
     
    End Class
     
    Public Class frmQuestion3
     
        Public Property Data As clsData = New clsData
     
        Sub New(ByRef d As clsData)
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Data = d
        End Sub
     
        ' sub de mise à jour des data
     
        Private Sub btnSuivant_Click(sender As System.Object, e As System.EventArgs) Handles btnSuivant.Click
            DialogResult = Windows.Forms.DialogResult.OK
            Close()
        End Sub
        Private Sub btnPrecedant_Click(sender As System.Object, e As System.EventArgs) Handles btnPrecedant.Click
            DialogResult = Windows.Forms.DialogResult.Cancel
            Close()
        End Sub
     
    End Class
     
    Public Class clsData
    'les données 
    End Class

    La fenêtre x (chef d'orchestre)
    Code vb.net : 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
    Public Class Form1
     
        Public Property Data As clsData = New clsData
     
        Private DicoForm As Dictionary(Of Integer, Form) = New Dictionary(Of Integer, Form) 'liste des form questionnaires
        Private numEcran As Integer = 1
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            DicoForm.Add(1, New frmQuestion1(Data)) ' questionnaire 1, passe l'instance de la classe data
            DicoForm.Add(2, New frmQuestion2(Data)) ' questionnaire 2, passe l'instance de la classe data
            DicoForm.Add(3, New frmQuestion3(Data)) ' questionnaire 3, passe l'instance de la classe data
        End Sub
     
        Private Sub btnDemarer_Click(sender As System.Object, e As System.EventArgs) Handles btnDemarer.Click
            While numEcran <= 3 ' ne quitte pas la boucle tant que la série complète n'est pas faite (faire un select case sur le dialog result pour une gestion plus fine si souhaitée)
                If DicoForm(numEcran).ShowDialog() = Windows.Forms.DialogResult.OK Then numEcran += 1 Else numEcran -= 1
                If numEcran = 0 Then numEcran = 1
            End While
        End Sub
     
    End Class
    Note : le close des fenêtres modales ne dispose pas celle-ci.
    Il est ainsi très facile d'ajouter des écrans ou de changer l'ordre d'affichage.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    C'est vrai que ça m'a l'air bien comme ça.

    Merci pour l'idée
    Kropernic

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Hello,

    Je rouvre la discussion car je rencontre un problème avec l'event Form.Load dans l’enchaînement des steps.

    D'après la MSDN, l'event Form.Load n'est déclenché que lors du premier affichage de la form.

    Or, si je suis sur mon step1, que je passe au step2 en faisant un Hide() du step1 et que je reviens au step1, l'event load est de nouveau déclenché.

    Pourtant, la form n'a jamais été fermée/disposée. Elle était juste "en arrière plan". Pourquoi l'event Load est-il donc à nouveau déclenché...

    Cela à pour effet que, au lieu de conserver les données que l'utilisateur avait déjà encodé, les contrôles sont tous réinitialisés comme si l'utilisateur n'avait encore rien fait.

    Une idée pour remédier à cela ?? La MSDN est-elle incorrecte (j'en doute) ou y a-t-il une particularité de ShowDialog qui fait que Load est déclenché malgré tout ??
    Kropernic

  5. #5
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    La réponse se trouve ici.

    J'aurai donc appris qu'il ne faut plus utiliser l'event Load ^^.
    Kropernic

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/08/2013, 13h14
  2. Bonne pratique pour une ListView
    Par p4ndore dans le forum Composants graphiques
    Réponses: 8
    Dernier message: 13/02/2012, 16h03
  3. Bonnes pratiques pour une vue partagée
    Par HaloKard dans le forum MVC
    Réponses: 3
    Dernier message: 13/11/2010, 13h23
  4. Bonne pratique pour une table de décision
    Par Nalfeim dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2009, 11h30
  5. Tutoriel SEO : Introduction et bonnes pratiques pour l'optimisation de pages Web
    Par Community Management dans le forum Référencement
    Réponses: 0
    Dernier message: 06/07/2006, 00h03

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