Académique Documents
Professionnel Documents
Culture Documents
8 décembre 2008
Développement .NET : 2/3
Sommaire
Introduction .................................................................................................................. 3
Votre premier programme WinForm ............................................................................. 4
Création de votre projet ................................................................................................................ 4
Projet Application Console vs Applicaiton Windows ...................................................................... 5
Projet Application Console ........................................................................................................ 5
Projet Application Windows ...................................................................................................... 5
Importation des classes métiers de l’atelier 1 ............................................................................... 6
Le designer de Visual Studio .......................................................................................................... 6
Les classes partielles (optionnel) ................................................................................................... 7
C’est parti : réalisation de notre programme.................................................................. 9
Votre premier contrôle .................................................................................................................. 9
Le traditionnel menu déroulant ..................................................................................................... 9
Les évènements en théorie (optionnel) ........................................................................................ 10
Liste de données .......................................................................................................................... 10
Tableau de données .................................................................................................................... 12
Pour aller plus loin (Optionnel) .................................................................................................... 13
Conclusion ................................................................................................................... 14
Liens et Ressources ...................................................................................................... 15
2
Développement .NET : 2/3
Introduction
Dans cet atelier, nous vous proposons de continuer l’application de gestion de commandes d’une
entreprise en négoce commencée dans l’atelier 1. Cette fois, nous allons donner un peu plus de style
à notre interface, en passant du traditionnel mode console à la fenêtre Windows évoluée. A nous les
tableaux, boutons et autres gestion de souris !
En plus des bases des applications WinForms, cet atelier vous permettra de vous familiariser avec
les notions d’évènements, indispensables lorsque nous créons un programme dans un langage de
haut niveau.
Tout au long de ce TP, vous trouverez différentes astuces de Visual Studio, qui apporte aux
développeurs .NET une aide précieuse ce qui en fait un élément prépondérant dans « l’écosystème
.NET ».
3
Développement .NET : 2/3
En réalité, il s’agit simplement d’un ensemble de classes de la BCL permettant d’interagir avec les
éléments d’interface natifs de Windows, à partir de .NET. Il s’agit donc d’une surcouche (wrapper)
encapsulant les APIS Windows pour les programmeurs .NET.
C’est en partie pour cela que .NET n’est pas portable et ne fonctionne que dans un
environnement Windows. Néanmoins, il est possible de trouver des implémentations de .NET
compatibles avec d’autres systèmes, comme Mono, développé par Novell. Mais cela dépasse le cadre
de notre formation…
En sélectionnant « Application Windows » comme type de projet, vous avez indiqué à Visual
Studio de créer pour vous les bases de votre programme, en créant les quelques fichiers nécessaires
à celui-ci. Mais concrètement, quelles sont les différences et similitudes entre un projet WinForm et
un projet console ?
4
Développement .NET : 2/3
5
Développement .NET : 2/3
Pour cela, nous allons les importer dans notre projet en passant par l’explorateur de solution.
1. Dans l’explorateur de solution, faite un clique droit sur votre projet puis « Ajouter » et enfin
« Elément existant ».
2. Dans l’explorateur qui vient de s’ouvrir, sélectionner les classes « Client », « Commande »,
« Entreprise » et « Fournisseur ». (Pensez à maintenir la touche Ctrl pour les sélections
multiples…)
3. Vérifier que vos classes sont bien dans le même namespace que votre application. Si vous
avez suivis nos tutoriels, elles doivent se trouver dans le namespace AppliGestion, c'est-à-
dire le même namespace que les autres classes (dont votre programme et votre formulaire)
de votre application.
Pour information, une autre solution aurait été de créer un projet de type « Librairie de classe »
contenant nos classes métiers. Nous aurions ainsi séparé complètement ces classes de notre
interface. Nous reviendrons sur ce genre de considérations lors de l’atelier 3.
Vous devriez avoir dans un coin de votre IDE (Integrated Development Environment : Visual
Studio) la ToolBox, contenant les contrôles de base que vous allez pouvoir ajouter à votre interface.
N’hésitez pas à jouer avec en insérant sur votre form des boutons, labels, images…
Une autre boite de dialogue intéressante est la fenêtre « Propriétés » qui va vous afficher sous
forme de tableau les différentes propriétés que vous allez pouvoir modifier sur l’élément actif. Cet
élément actif peut être la Form, ou tous les autres contrôles que vous aurez ajouté. Il suffit
simplement de cliquer sur un contrôle pour que les propriétés s’actualisent.
Une fois que vous avez sélectionné un contrôle pour afficher ses propriétés, vous pouvez cliquez
sur l’éclair présent dans les boutons de la boite de dialogue « Propriétés ». Cet éclair va vous
permettre de switcher cette boite de dialogue vers le mode « Evènements ». Vous serez ainsi capable
d’afficher et de modifier les méthodes que vous souhaitez associer aux différents évènements du
contrôle actifs. Ne vous inquiétez pas, vous aurez plus de détails sur les évènements dans quelques
paragraphes…
Tous ces outils (Mode Design, boîte à outils, fenêtre de propriétés) ne sont que des assistants de
Visual Studio. Derrière, rien n’est magique. En réalité, Visual Studio va juste générer pour vous le
fichier Form1.Design.cs (complément à la classe Form1.cs), contenant toutes les déclarations et
instructions nécessaires pour reproduire l’interface que vous avez créé en mode design, et que vous
avez configuré grâce à la fenêtre des propriétés.
6
Développement .NET : 2/3
Par exemple, le fait d’avoir glisser un bouton sur votre Form a créé dans la méthode
InitializeComponent() les instructions suivantes :
//
// button1
//
this.button1.Location = new System.Drawing.Point(81, 67);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
Si vous le souhaitez, il est tout à fait possible de créer plusieurs classes dans un seul fichier (cas de
classes utilitaires simples dans un fichier Utils par exemple…). Néanmoins, je ne préconise pas cette
solution car il est beaucoup plus facile de s’y retrouver lorsque l’on respecte le principe « une classe,
un fichier ».
Par contre, avec le framework 1.0, il était impossible de créer une classe sur plusieurs fichiers. Le
framework 2.0 a apporté une nouveauté appréciable : les classes partielles. Grâce au mot clé
« Partial », il est donc possible de décrire une classe dans plusieurs fichiers. Mais à quoi cela sert t-
il ?
7
Développement .NET : 2/3
Il est envisageable de séparer des définitions de classes trop longues. Mais je ne conseille
pas cette solution. Si vous avez une classe vraiment trop longue, c’est que vous avez un
problème de conception. Essayez de factoriser ;-)
Il peut être plus facile de travailler à plusieurs sur une classe en même temps. Attention,
selon moi, cela n’arrive pas aussi souvent que cela, ne créez pas un fichier par
développeur pour toutes les classes de votre projet !
Vous utilisez des outils générateurs de code, comme Visual Studio ;-) Il sera ainsi pratique
de pouvoir séparer le code généré, du code écrit par vous-même. Cela vous permettra de
vous concentrer sur l’essentiel, et de vous assurez également que l’outil ne va pas
modifier le code que vous avez écrit ! C’est donc ce mécanisme qui est utilisé par le
designer et la fenêtre de propriétés. Les fichiers Form1.designer.cs et Form1.cs
définissent la même classe !
Vous avez compris, je pense que les classes partielles doivent être utilisées avec précaution pour
garder une architecture de projet confortable et maintenable. Néanmoins, elles sont indispensables
lorsque l’on travaille avec un générateur de code.
8
Développement .NET : 2/3
Dans un premier temps nous allons ajouter un composant « label ». Celui-ci a pour vocation
première d’afficher du texte. Pour le placer sur la forme, on sélectionne donc le composant label
dans la « boite à outils» et on le drag & drop sur la winform de notre projet. Voilà, vous venez
d’ajouter votre premier composant, et il faut savoir que cela fonctionne de la même manière pour la
quasi-totalité des composants présents dans Visual Studio.
Pour faire simple nous allons modifier le texte du Label. Pour cela, nous allons utiliser la fenêtre
de propriétés décrit dans la partie précédente. N’hésitez pas à passer un peu de temps pour
découvrir toutes les propriétés présentes pour un Label, certaines vont être communes aux autres
contrôles. Pour étudier plus en détail les différents contrôles et connaître leurs propriétés, méthodes
et comportements n’hésitez pas à consulter la librairie de classe MSDN en ligne
(http://msdn2.microsoft.com)
Pour modifier, le texte, il suffit simplement d’éditer le champ « Text » se trouvant dans les
propriétés du label. Renseignez le champ avec le texte qui vous plaira (par exemple « Toto » ou «
Hello World» ). Vous avez réussiavec succès la création et l’édition d’un composant graphique. A
présent nous allons composer notre interface de la même manière; en déposant, étudiant et codant
le comportement des contrôles (Hé oui, il y a malgré tout quelques petits choses à coder avec ses
mains…)
Comme vous pouvez le constater, ce composant de ne se place pas où l’on veut sur la fenêtre,
mais vous pouvez noter qu’une barre de menu a fait son apparition dans winform, et que le
composant « menustrip » est représenté dans un menu sous le designer.
Nous allons créer notre premier menu. Sur la winform cliquez à l’endroit où il y a marqué « cliquer
ici » dans barre de menu. A présent vous pouvez éditer les « label » de votre menu. Entrons comme
nom de menu « Fichier » puis en dessous ajouter un sous menu que vous appelez « Exit » ou
« Fermer ».
Nous allons maintenant tester notre application. Pour cela, nous allons demander à Visual Studio
de compiler notre programme, puis de l’exécuter. Le raccourci magique pour faire cela est F5. Visual
Studio va même lancer le mode Debug, que nous détaillerons lors de la troisième séance.
9
Développement .NET : 2/3
Testez votre tout nouveau menu. Formidable tout fonctionne, mais malheureusement lorsque
l’on clique sur « Exit » rien ne se passe ! Pour cela il est nécessaire de coder un comportant se
rattachant au contrôle. Concrètement, l’élément Exit a un évènement, correspondant au click
gauche, onClick auquel on va devoir répondre pour pouvoir exécuter des instructions lorsque celui-ci
va se déclencher. Cette réponse est en réalité une méthode.
Nous allons donc créer une méthode pour répondre à l’évènement onClick du ToolStripMenuItem
« Exit » et indiquer à cet objet d’exécuter cette méthode lorsque l’évènement onClick se produira.
Pour l’évènement onClick, rien de plus simple, Visual Studio nous offre un petit raccourci
sympathique, il suffit de double cliquer sur notre élément (sur « Exit ») pour créer la méthode et
l’attacher à l’évènement.
Nous allons donc coder la fonction de fermeture de l’application. Entre les accolades entrez le
code suivant :
this.close() ;
Normalement, vous ne devriez pas avoir de soucis pour comprendre cette instruction. this
représente l’objet en cours, c'est-à-dire l’instance de votre fenêtre Form1, et close() est une méthode
de la classe Form1. Vous allez me dire que vous n’avez pas créé cette méthode form. Mais souvenez-
vous des notions d’héritage ! Form1 hérite de la classe System.Windows.Forms.Form, qui contient la
méthode close() !
Compilez et exécutez une nouvelle fois l’application. Si tout se passe bien vous devriez être en
mesure de pouvoir fermer la fenêtre de votre programme. Vous venez de créer votre premier
évènement ! A présent vous avez quasiment toutes cartes en mains pour faire vos propres interfaces
graphiques. Toute IHM se programme de cette manière.
Nous n’allons pas en rester là ! Il pourrait être intéressant de manipuler des contrôles un peu plus
évolués.
Dans une application C# Windows Forms ou Web typique, vous vous abonnez à des événements
déclenchés par des contrôles tels que les boutons et les zones de liste. Vous pouvez utiliser
l'environnement de développement intégré (IDE) de Visual C# pour parcourir les événements qu'un
contrôle publie et sélectionner ceux que vous souhaitez gérer. L'IDE ajoute automatiquement une
méthode de gestionnaire d'événements vide, ainsi que le code pour s'abonner à l'événement
Liste de données
Lors de notre première formation, nous avions créé une application console permettant de
« gérer » des commandes avec des clients et des fournisseurs. Les classes que nous avions
développées représentées la couche métier de l’application. Pour rappel, le but de notre projet est
d’ajouter une couche de présentation grâce aux winforms.
10
Développement .NET : 2/3
Avant toute chose, il faut initialiser des données pour que notre futur programme puisse les
exploiter. Nous allons donc créer une liste de clients au sein de notre programme (dans cette
formation nous n’appliquerons pas les principes du modèle MVC, ou d’autres architectures avancées
afin de faciliter le plus possible la compréhension des composants formant une IHM).
Créons une « List » qui sera une donnée de la classe forme. Pour cela on place la déclaration juste
après le « public partial class Form1 : Form », dans le fichier Form1.cs.
Pour créer une liste contenant des clients, copier-coller cette ligne de code
Using System.ComponentModel;
Pour initialiser des données dans cette liste, nous allons créer une commande dans le menu de
notre application. Cette commande, que vous pouvez intituler « Charger les données » va, lors de
l’appel de l’évènement click, créer quelques clients et les ajouter dans la liste clientList que nous
venons de créer. Pour faire tout cela, il suffit de faire comme pour la commande « Exit », c'est-à-dire
de créer l’intitulé de la commande, puis de double cliquer dessus pour générer automatiquement
toute la mécanique événementielle. Ensuite, vous pouvez remplir la méthode générés par les
instructions suivantes :
11
Développement .NET : 2/3
Nous avons besoin d’afficher la liste de notre liste de client. Nous allons utiliser le composant
« ListBox » pour représenter cette liste au sein de notre programme. On drag & drop le composant
sur la winform (sur laquelle nous sommes en tain de travailler).
Pour le moment la «listbox » n’affiche rien, il est nécessaire de spécifier avec quelles données elle
doit travailler. Pour cela il existe une propriété de listbox appelé «DataSource » qui permet de fournir
une collection d’objet au composant, et lui ce charge de l’afficher tous les items compris dans cette
collection (ceci est rendu possible grâce à l’implémentation de l’interface IList. La propriété
DataSource n’est donc compatible uniquement avec les collections implémentant cette interface.)
Ceci se traduit par une seule ligne de code à ajouter à la suite de notre initialisation de données
au sein de la méthode générée pour répondre à l’événement click de la commande « Charger les
données ». Vous pouvez donc utiliser l’instruction suivante à la suite de l’initialisation des différentes
commandes et clients :
listBox1.DataSource = clientList;
Compilez l’application. Normalement vous devriez voir apparaitre dans le composant listbox, les
deux clients que nous avons défini. Vous remarquez que l’affichage du nom du client ne parait pas
« standard ». Vous avez raison, en fait lorsque la listbox veut afficher la string correspondant à l’objet
client, elle appelle notre surcharge de la méthode ToString() que nous avions codé lors de notre
premier TP !
Tableau de données
Maintenant que nous avons notre liste de clients, il serait bon d’afficher les commandes relatives
à chaque client. Lorsque l’on clique sur un des clients de la liste, il faut afficher sa liste de commande,
il y a donc un évènement à coder.
Le contrôle DataGridView fournit une table personnalisable pour l'affichage des données. La
classe DataGridView permet la personnalisation des cellules, des lignes, des colonnes et des
bordures. Vous pouvez utiliser un contrôle DataGridView pour afficher des données avec ou sans
source de données sous-jacente. Sans spécifier une source de données, vous pouvez créer des
colonnes et des lignes qui contiennent des données et les ajouter
directement au DataGridView. Vous pouvez également définir les
propriétés DataSource et DataMember pour lier le DataGridView à une
source de données et le remplir automatiquement avec des données.
12
Développement .NET : 2/3
Écrivons dans cette méthode le code source suivant puis tentons de comprendre comment tout
cela fonctionne.
Une fois casté en listbox, nous pouvons utiliser toutes les méthodes de ce composant. Il existe
une méthode permettant de récupérer l’objet sélectionné dans la liste, cette méthode se nomme
«SelectedItem» et retourne un object. Nous allons donc écrire « ((ListBox)sender).SelectedItem »,
mais comme nous souhaitons manipuler un objet de type client a la sortie de cette ligne, il est donc
nécessaire de caster à nouveau mais cette fois en Client, se qui nous donne la ligne de code
suivante : « Client monClient = (Client)((ListBox)sender).SelectedItem; »
Ensuite nous allons alimenter notre datagridview grâce à un DataSource comme nous avons fait
un peu plus haut avec la listbox. Nous souhaitons afficher la liste des commandes du client en cours
de sélection. On indique que le DataSource du DataGridView sera remplis par la liste de commande
du client soit «monClient.Commandes ». Compilez et admirez le résultat. Vous venez de faire de la
programmation évènementielle en écrivant moins de 5 lignes de code !
N’hésitez pas à explorer les différentes possibilités d’implémentations en regardant les différents
évènements associés au gridView, explorer ce que vous propose l’IntelliSense, demandez aux
formateurs…
13
Développement .NET : 2/3
Conclusion
Grâce à ce TP, vous devez avoir les bases nécessaires à la découverte de tous les aspects des
technologies .NET. En effet, ces bases sont communes que vous vouliez faire du développement
d’application Windows, du développement sur téléphones/PDA, du développement de jeux vidéo, du
développement Web ou autre encore…
Vous trouverez sur la fiche de la formation sur le site www.efrei-microsoft.fr un zip contenant le
projet que vous avez réalisé lors de cette séance.
14
Développement .NET : 2/3
Liens et Ressources
Les ressources de cette formation (Power Point et ce document) sont accessibles sur
notre site web : www.efrei-microsoft.fr, rubrique Formations
Le coach C# : http://msdn2.microsoft.com/fr-fr/vcsharp/bb409645.aspx
A bientôt !
Ce document a été réalisé en décembre 2007 par Benjamin Talmard et Vincent Dieudonné pour
EFREI Microsoft. Il a été révise en décembre 2008 par Benjamin Talmard
15