Meilleur auteur de réponses
VB 2005 - Créer une form comme un assistant

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.
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 surRichard Clark
Consultant - Formateur .NET
http://www.c2i.fr
Depuis 1996: le 1er site .NET francophone- Proposé comme réponse Ciprian Duduiala jeudi 5 avril 2012 12:28
- Marqué comme réponse Ciprian Duduiala mardi 10 avril 2012 05:49
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.
-
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.
- Modifié Guy Lafrenière mercredi 4 avril 2012 19:58
-
-
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 -
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 surRichard Clark
Consultant - Formateur .NET
http://www.c2i.fr
Depuis 1996: le 1er site .NET francophone- Proposé comme réponse Ciprian Duduiala jeudi 5 avril 2012 12:28
- Marqué comme réponse Ciprian Duduiala mardi 10 avril 2012 05:49
-
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.
-
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 -
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.