WinForms pour le tp "Voyageurs commerciaux"

TP Commercial, version WinForm

Pré-requis :

Il faut disposer de l'application  fonctionnant et produisant un fichier sérialisé.

Vous pouvez néanmoins commencer le tp avec seulement les classes Commmercial, NoteFrais et ServiceCommecial

1) Préparation de l'application.

Rappel : lorsque l'on crée une application VS, l'environnement crée une solution et un projet, c'est dans le projet que l'on écrit le code et qui contient la méthode Main ; une solution peut contenir plusieurs projets.

Ouvrons la solution/projet contennant l'application console Commerciaux"

A partir de l'explorateur de solution, ajoutons (click droit) un nouveau projet (WF_Commerciaux) de type Application Windows ; la configuration devient :

En cliquant (click droit) sur ce nouveau projet, indiquer que ce projet est le projet de demarrage.
Par ailleurs dans chaque formulaire créé, il faudra ajouter l'inclusion du namespace "commerciaux" (si c'est le nom du namespace de votre projet console).
               using Commerciaux;

Il faut aussi indiquer que chaque classe du projet console est public. Ajouter pour chaque classe :
public class Commercial //
pour la classe Commercial

En effet, par défaut chaque classe d'un namespace n'est visible qu'à l'intérieur du namespace.

2) L'application WinForm

Cette application contient plusieurs formulaires. L'application (les fichiers exécutables et le fichier de données sérialisé) est diponible ICI.
Après avoir télécharger le fichier zip, il faut décompresser l'ensemble et lancer l'application Commerciaux.exe.
L'application commence par ouvrir le fichier de données : Fichier/ouvrir le fichier service.sr.

Travail à faire
Tester et observer l'application.

Le menu principal permet d'ouvrir différentes options

Travail à faire
Construire ce formulaire en ajoutant un composant de type MenuStrip ; remplir le menu avec ses options.

L'option Ouvrir lance une boite de dialogue allant chercher un fichier; c'est l'objet OpenFileDialog qui s'en chargera; ce n'est pas un composant graphique mais ses services pourront être utilisés dans le code.

Travail à faire

- Déposer un objet OpenFileDialog dans le formulaire
- Ajouter deux champs privés dans le formulaire

- Dans l'événement click du menu fichier/ouvrir, écrire le code qui :
                         1) ouvre la boite de dialogue en utilisant la méthode ShowDialog
                         2) récupère le fichier sélectionné par l'utilisateur à l'aide de la propriété FileName
                         3) appelle la méthode qui charge le ServiceCommercial à partir du fichier.
- Dans l'événement click du menu fichier/enregistrer, écrire le code qui permet de sauvegarder le ServiceCommercial dans le fichier.

Les options du menu Commercial ouvre chacune un formulaire différent. C'est l'événement click de chaque sous-menu qui appellera le nouveau formulaire.

Chaque formulaire a besoin du ServiceCommercial récupéré dans le formulaire principal ; le formulaire principal passera cet objet à la construction :

private void nouveauToolStripMenuItem_Click(object sender, EventArgs e)
{
      FrmajoutCommercial f = new FrmajoutCommercial(this.leService);
      f.Show();
}

La première ligne crée un nouveau formulaire (d'ajout d'un commercial)
La deuxième ligne montre le formulaire.

Ceci ne peut se faire bien sûr que si un formulaire nommé ici FrmAjoutCommercial a été créé en conception et que son constructeur a été modifié. Chaque classe formulaire contiendra un champ privé de type ServiceCommercial.

Travail à faire
Effectuer cette opération pour les trois formulaires, dans un premier temps chaque formulaire créé ne contiendra rien.
Tester et vérifier que chaque formulaire s'ouvre bien à partir des menus.

             2.2- Le formulaire d'ajout d'un commercial

Celui-ci contient différents contrôles :
 

le formulaire

La première chose à faire après le dépot des composants sur le formulaire est de modifier la propriété Name, en respectant les règles suivantes :

Composant
Préfixe
Exemple
Formulaire Frm FrmAjoutCommercial
Button btn btnValider
TextBox txt txtNom
Label lbl lblNom
ListBox lst lstPuissance
GroupBox grBox grBoxCategorie
RadioButton rdBtn rdBtnCategorie
CheckBox chk chkVille
DateTimerPicker dtp dtpDate
ComboBox cbm cbmNom

Il n'est pas nécessaire de renommer les composants qui ne seront jamais utilisés dans le code comme c'est souvent le cas des Label.

Le chargement des valeurs "en dur" dans le ComboBox se fait dans le constructeur en utilisant la méthode Add de la propriété Items.
Le bouton valider teste le RadioButton "checké", crée un nouveau commercial et l'ajoute au service commercial.

Travail à faire
Construire le formulaire. Tester que le nouveau commercial est bien enregistré dans le fichier sérialisé.

2.3- Le formulaire d'ajout de notes de frais

La liste des commerciaux est remplie à partir de tous les commerciaux du service commercial (méthode Add, cf plus haut).

Nous écrivons ce chargement dans une fonction privée qui sera appelée dans le bon gestionnaire d'événement :
 

private void chargerListeCommerciaux()
{
     foreach (Commercial c in this.leService.getLesCommerciaux())
     {
           string nom = c.getNom();
           string prenom = c.getPrenom();
           this.lstCommerciaux.Items.Add(nom + " " + prenom);
      }
       this.lstCommerciaux.SelectedIndex = 0;     // sélection par défaut du premier
}

La sélection d'un radioButton fait apparaître les champs nécessaires à la saisie de la note de frais concernée (cf démo)

Le bouton valider ajoute au commercial sélectionné la note de frais (Transport, midi ou nuité) correspondante. Pour récupérer le commercial, il faudra extraire le nom et le prénom à partir de la sélection de la liste (SelectedItem) en utilisant la méthode split de la chaîne.

Travail à faire
Construire le formulaire. Imaginer un test pour vérifier que la note de frais a bien été ajoutée au bon commercial.

2.4- Le formulaire de visualisation des notes de frais

La gestion de la liste des commerciaux est identique au formulaire précédent.
Lorsque l'on clique sur un commercial, ses notes apparaîssent (événement selectedIndexChanged) . Il faudra utiliser la méthode ToString écrite dans l'application console.

Travail à faire
Construire le formulaire. Tester.