none
VB 2005 - Créer une form comme un assistant RRS feed

  • Question

  • Bonjour Groupe,

    Avec VB 2005, je veux créer une form qui agisse comme ces assistants qu'on voit souvent dans les applications, avec des boutons 'Précédent' et 'Suivant' pour avancer et reculer dans les étapes.

    Où puis-je trouver un code générique qui me permettrait de démarrer?

    Merci à l'avance pour toute aide.

    mercredi 4 avril 2012 19:23

Réponses

  • Vous pouvez également créer plusieurs UserControl qui correspondent à chaque étape.

    Vous avez une form principale avec les boutons Suivant, Précédent et un Panel vide et une propriété CurrentPage.

    Chaque UserControl implémente une interface IStep avec comme prop WizardContext (objet contenant les données manipulées dans le wizard).

    Donc par exemple dans l'évènement clic du bouton suivant :

    Private _currentStep as Integer
    
    Public sub NextClick(...)
       Dim context as WizardContext = CType(panel1.Controls(0), IStep).Context
       Select case _currentStep
          Case 2
             panel1.Controls.Clear()
             CType(Control2, IStep).Context = context
             panel1.Controls.Add(Control2)
          Case 3
             ....
        End Select
    End Sub
    
    Private _control2 as UserControlStep2 'Usercontrol2 implémente IStep
    Private ReadOnly Property Control2 as UserControl
       Get
           If _control2 is Nothing then _control2 = new Control2
           return _control2
       End Get
    End Property

    A affiner bien sur

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    jeudi 5 avril 2012 07:34

Toutes les réponses

  • Salut

    La solution que je peux te proposer c'est l'utilisation du control panel

    tu place sur ton formulaire autant de panel qu'il y aura d'étape et chaque panel aura les textbox , label, bouton etc

    que doit contenir la presentation de chaque etape et dans les boutons suivant et precedent tu caches tous les panel sauf celui de l'etape en cours

    Private Sub Btn_suivant_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       if etape=3 then
            Panel_etape1.Visible = false
            Panel_etape2.Visible = false
            Panel_etape3.Visible = true
            Panel_etape4.Visible = false
        End Sub
       'faire de meme pour les autres etapes
    End Sub

    evidement si tu suit cela tu devra utiliser "select case" au lieu de plusieurs " If"

    cordialement


    la FOI déplace les montagnes et bien DOTNET les effaces complétement.

    mercredi 4 avril 2012 19:48
  • Bonjour,

    Merci pour ta réponse.

    J'avais utilisé cette méthode dans un programme VB6.

    Ma question vise à savoir s'il existe une méthode plus élégante ou plus simple dans VB2005.



    mercredi 4 avril 2012 19:56
  • Par vraiment trouvé plus elegant que ca mais tu peux creer ton propre control ce qui est tres loin d'etre elegant ;)

    la FOI déplace les montagnes et bien DOTNET les effaces complétement.

    mercredi 4 avril 2012 20:08
  • Bonjour Guy,

    En fait ça dépend de ce que tu as à afficher, car s'il s'agit d'un texte et d'une image, tu peux monter depuis les ressources par exemple, le texte et l'image selon l'état d'avancement, ce qui est plus clair, car les panels sont une solution, mais le problème est qu'une forme couverte de panels et chaque panel d'objets, ça devient vite inextricable et pénible à programmer (form surchargée)...

    Le principe serait :

    Dim bouge as byte ' variable globale d'avancement
    Sub button... bouton avance et recule()
    select case bouge
    case 1
    textbox1.text = my.ressource.Tx
    pictureBox1.... = ressource Px
    Case 2
    ...

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    jeudi 5 avril 2012 06:51
  • Vous pouvez également créer plusieurs UserControl qui correspondent à chaque étape.

    Vous avez une form principale avec les boutons Suivant, Précédent et un Panel vide et une propriété CurrentPage.

    Chaque UserControl implémente une interface IStep avec comme prop WizardContext (objet contenant les données manipulées dans le wizard).

    Donc par exemple dans l'évènement clic du bouton suivant :

    Private _currentStep as Integer
    
    Public sub NextClick(...)
       Dim context as WizardContext = CType(panel1.Controls(0), IStep).Context
       Select case _currentStep
          Case 2
             panel1.Controls.Clear()
             CType(Control2, IStep).Context = context
             panel1.Controls.Add(Control2)
          Case 3
             ....
        End Select
    End Sub
    
    Private _control2 as UserControlStep2 'Usercontrol2 implémente IStep
    Private ReadOnly Property Control2 as UserControl
       Get
           If _control2 is Nothing then _control2 = new Control2
           return _control2
       End Get
    End Property

    A affiner bien sur

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    jeudi 5 avril 2012 07:34
  • Salut Ehjoe

    je crois que les resources ne sont pas vraiment approprié

    si a chaque etape l'utilisateur fait des choix dans des radiobutton, des chexkbox, des combobox et entre des données dans des textbox. il sera tres difficile des les recuperer a la fin de toute les etapes lorsqu'il cliquera sur terminer.

    enfin avec les ressources il sera encore difficile de reorganiser la position des controls a chaque etape (parce que oui la position des controls changera) .

    Maintenant je peux me tromper !!

    Amicalement


    la FOI déplace les montagnes et bien DOTNET les effaces complétement.

    jeudi 5 avril 2012 07:36
  • Bonjour mmw01,

    En fait ma réponse est relative, ça dépend en effet du nombre, de la taille, du besoin ou non de conserver...

    Généralement on cale l'objet en taille sur le plus gros qui doit être mis dedans, concernant l'image, en la fixant en left/top elle se resize toute seule, mais bon... faut savoir exactement...

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    jeudi 5 avril 2012 07:46
  • Bonjour Groupe,

    Merci pour vos suggestions.

    La réponse de EhJoe ne convient pas pour la raison évoquée par mmw01. Chacune de mes étapes comprend plusieurs contrôles dont je dois garder la trace pour la suite des choses.

    La proposition de Richard Clark est une nouveauté de VB2005 avec laquelle je ne suis pas familier. Je viens du monde VB6 et j'ai encore peu utilisé VB2005. Avec le mot wizard, j'ai tendance à penser que la classe WizardContext est taillée sur mesure pour une form de type wizard, justement ce que j'essaie de faire. Je dois approfondir mes connaissances sur ce sujet. Merci pour la suggestion.

    mardi 10 avril 2012 13:56