C# 6 - Développez des applications Windows avec Visual...

24
Jérôme HUGON C# 6 Développez des applications Windows avec Visual Studio 2015

Transcript of C# 6 - Développez des applications Windows avec Visual...

Page 1: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

ISB

N :

978-

2-74

60-9

700-

1

39 €

C# 6 - Développez des applications Windows avec Visual Studio 2015Jérôme HUGON est développeur/consul-tant .NET depuis de nombreuses années et est certifié Microsoft sur les technolo-gies .NET. Son expérience du développe-ment de sites web ASP.NET et SharePoint comme d’applications Windows ou Micro-soft Surface lui permet d’apporter au lec-teur une connaissance de base solide du langage C# mais aussi une belle ouverture vers des concepts plus avancés pour une utilisation optimale de ce langage.

Ce livre sur le développement d’applications Windows avec le langage C# et Visual Studio 2015 est destiné aux développeurs qui débutent avec le framework .NET. Il leur permet d’apprendre les bases du langage C# et introduit des concepts plus avancés leur donnant une vue d’ensemble des possibilités offertes par le langage C#, Visual Studio et le framework .NET en général. L’auteur a choisi une approche pas à pas tout en construisant une application fonctionnelle tout au long de l’ouvrage pour illustrer de manière pratique et cohérente les concepts abordés.L’apprentissage commence par la familiarisation avec l’interface de Visual Studio 2015 ainsi qu’avec le concept de l’architecture .NET. Les détails du langage C#, sa syntaxe et ses fonctionnalités comme les classes, l’héri-tage, les interfaces, les types génériques ou encore les délégués et les évènements sont ensuite expliqués avant d’aborder la conception d’inter-faces utilisateur. La conception de l’interface utilisateur couvre toutes les phases utiles pour créer des applications Windows à la fois fonctionnelles et ergonomiques, allant de la création de formulaires à la création de contrôles en passant par l’implémentation de gestionnaires d’évènements et la validation des données saisies. Une introduction à la conception d’applications WPF est également incluse.Les outils de Visual Studio qui permettent de réaliser les tests et le débo-gage des applications sont détaillés en présentant les techniques de gestion des erreurs mais aussi les concepts permettant de surveiller les applications comme le traçage, l’interaction avec les journaux d’évènements et l’utilisa-tion des compteurs de performance.L’utilisation de Entity Framework est détaillée au travers d’exemples concrets permettant de comprendre rapidement comment créer des modèles de don-nées et comment les utiliser pour communiquer avec une base de données tout en apprenant à utiliser le langage de requête LINQ pour interagir avec des données sous différents formats (objets, SQL ou XML). L’alternative du stockage de données d’une application sur le système de fichiers et l’utilisa-tion du concept de la sérialisation sont également détaillés fournissant ainsi une vision globale des possibilités offertes par le framework .NET concernant la gestion des données.Des concepts plus avancés sont également présentés afin d’exposer une gamme plus large des possibilités offertes par le langage C# et Visual Studio : l’utilisation des expressions régulières, le développement d’applications multi-tâches et asynchrones, la globalisation et la localisation d’une appli-cation, la sécurité du code, l’implémentation d’applications client/serveur, le dessin avec GDI+ ainsi que la réflexion font partie des sujets introduits.La dernière partie de l’ouvrage est consacrée à la création d’assemblages ainsi qu’au déploiement des applications. Les outils et techniques mis à dis-position par Visual Studio pour créer des installeurs Windows et configurer les applications y sont détaillés.Le code de l’application exemple traitée dans l’ouvrage est en téléchargement sur le site www.editions-eni.fr.

Téléchargementwww.editions-eni.fr.fr

Sur www.editions-eni.fr :b Le code de l’application développée dans le livre.

Avant-propos • Travailler avec Visual Studio 2015 • L’architecture .NET • Intro-duction au langage C# • La création de types • L’héritage • Types génériques • Délégués, évènements et expressions lambda • Création de formulaires • Implémentation de gestionnaires d’évè-nements • Validation de la saisie • Créa-tion de contrôles utilisateurs • Création d’applications Windows Modern UI • Débogage • Gestion des exceptions • Monitoring • Tests unitaires • Création du modèle de données • Présentation de En-tity Framework • Présentation de LINQ • LINQ to Entities • LINQ to SQL • LINQ to XML • Le système de fichiers • Séria-lisation • Expressions régulières • Multi-threading • Globalisation et localisation • Sécurité • Pour aller plus loin • Assem-blages et configurations • Déploiement

Les chapitres du livre

Pour plus d’informations :

Jérôme HUGON

C# 6 Développez des applications Windows avec Visual Studio 2015

Dév

elop

pez

des

appl

icat

ions

W

indo

ws

avec

Vis

ual S

tudi

o 20

15C#

6

Page 2: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

1Table des matières

Avant-propos

Chapitre 1Travailler avec Visual Studio 2015

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2. L'interface de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.1 L'éditeur de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.2 Le concepteur de vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.3 Le débogueur intégré . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.4 Le gestionnaire d'extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.5 NuGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.6 Fenêtres personnalisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3. La création de solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.1 Définir le point d'entrée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.2 La différence entre projets et solutions . . . . . . . . . . . . . . . . . . . . 303.3 Configurer le projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.4 La conversion de solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.5 Les projets partagés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.6 Les outils de refactorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence de l'ouvrage EI6C15VIS dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

Page 3: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

2Développez des applications Windows avec Visual Studio 2015

C# 6

Chapitre 2L'architecture .NET

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2. CLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3. Les bibliothèques de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4. Les types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.1 Les types valeur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.2 Les types référence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Chapitre 3Introduction au langage C#

1. La syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471.1 Les identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471.2 Les mots-clés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471.3 La ponctuation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.4 Les opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

1.4.1 Les opérateurs de calcul . . . . . . . . . . . . . . . . . . . . . . . . . . . 501.4.2 Les opérateurs d'assignation. . . . . . . . . . . . . . . . . . . . . . . . 501.4.3 Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . 51

1.5 La déclaration de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521.6 Les instructions de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

1.6.1 Les instructions conditionnelles . . . . . . . . . . . . . . . . . . . . 531.6.2 Les instructions itératives . . . . . . . . . . . . . . . . . . . . . . . . . 571.6.3 Les instructions de saut . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

1.7 Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

2. Les espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.1 Le mot-clé using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.2 Le mot-clé alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662.3 Les classes statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Page 4: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

3Table des matières

3. Les types de base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.1 Les types numériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

3.1.1 Les entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.1.2 Les décimaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

3.2 Les booléens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683.3 Les chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.4 Les types nullable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703.5 La conversion de types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

3.5.1 La conversion implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.5.2 La conversion explicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

4. Les constantes et les énumérations . . . . . . . . . . . . . . . . . . . . . . . . . . . 734.1 Les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734.2 Les énumérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

5. Les tableaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

6. Les collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

7. Les directives preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Chapitre 4La création de types

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

2. Les niveaux d'accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

3. Les structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

4. Les classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.1 Les champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.2 Les propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.3 Les méthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

4.3.1 La surcharge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914.3.2 Les paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

4.4 Les constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.5 Les destructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984.6 Les classes et membres statiques . . . . . . . . . . . . . . . . . . . . . . . . . 99

Page 5: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

4Développez des applications Windows avec Visual Studio 2015

C# 6

4.7 Les classes partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.8 Le mot-clé this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014.9 Les indexeurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024.10 La surcharge d'opérateurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

4.10.1Les opérateurs arithmétiques. . . . . . . . . . . . . . . . . . . . . . 1044.10.2Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . 106

Chapitre 5L'héritage

1. L'héritage de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091.1 Implémenter l'héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091.2 Les membres virtuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1111.3 Masquer les membres hérités. . . . . . . . . . . . . . . . . . . . . . . . . . . 1111.4 Le mot-clé base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1121.5 Les classes et membres abstraits . . . . . . . . . . . . . . . . . . . . . . . . 1131.6 Les classes et les méthodes scellées . . . . . . . . . . . . . . . . . . . . . . 1141.7 Les constructeurs dérivés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151.8 Le polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

2. Les interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192.1 L'implémentation d'interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 1192.2 Le polymorphisme d'interface . . . . . . . . . . . . . . . . . . . . . . . . . . 1212.3 L'héritage d'interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

Chapitre 6Types génériques

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

2. La création de types génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

3. Les contraintes de type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

Page 6: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

5Table des matières

4. Les interfaces génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294.1 La variance dans les interfaces génériques . . . . . . . . . . . . . . . . 130

4.1.1 La covariance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304.1.2 La contravariance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

4.2 La création d'interfaces génériques variantes . . . . . . . . . . . . . . 1324.3 L'héritage d'interfaces génériques variantes . . . . . . . . . . . . . . . 133

5. La création de méthodes génériques . . . . . . . . . . . . . . . . . . . . . . . . . 134

6. Valeur par défaut générique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

7. L'héritage de classe générique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Chapitre 7Délégués, évènements et expressions lambda

1. Les délégués . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391.1 Les paramètres de méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401.2 Les méthodes cibles multiples . . . . . . . . . . . . . . . . . . . . . . . . . . 1411.3 Les délégués génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421.4 La compatibilité des délégués. . . . . . . . . . . . . . . . . . . . . . . . . . . 142

2. Les évènements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

3. Les expressions lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1473.1 L'utilisation des expressions lambda . . . . . . . . . . . . . . . . . . . . . 1483.2 Les délégués génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493.3 La capture de variable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

Chapitre 8Création de formulaires

1. Utiliser les formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1531.1 Ajouter des formulaires au projet . . . . . . . . . . . . . . . . . . . . . . . 1531.2 Modifier le formulaire de démarrage . . . . . . . . . . . . . . . . . . . . . 1561.3 Les propriétés des formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . 1561.4 Les méthodes des formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . 159

Page 7: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

6Développez des applications Windows avec Visual Studio 2015

C# 6

1.5 Les évènements des formulaires . . . . . . . . . . . . . . . . . . . . . . . . 160

2. Utiliser les contrôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612.1 Les types de contrôles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612.2 Ajouter des contrôles aux formulaires . . . . . . . . . . . . . . . . . . . 1622.3 Les propriétés des contrôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642.4 Les menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.5 Les conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1682.6 L'ergonomie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692.7 Ajouter des contrôles à la boîte à outils . . . . . . . . . . . . . . . . . . 171

Chapitre 9Implémentation de gestionnaires d'évènements

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

2. La création de gestionnaires d'évènements . . . . . . . . . . . . . . . . . . . . 1742.1 La mécanique d'un évènement. . . . . . . . . . . . . . . . . . . . . . . . . . 1762.2 L'ajout dynamique d'un gestionnaire d'évènements . . . . . . . . 1762.3 La suppression dynamique d'un gestionnaire d'évènements177

3. Les gestionnaires d'évènements avancés . . . . . . . . . . . . . . . . . . . . . . 1783.1 Un gestionnaire pour plusieurs évènements. . . . . . . . . . . . . . . 1783.2 Plusieurs gestionnaires pour un évènement . . . . . . . . . . . . . . . 178

Chapitre 10Validation de la saisie

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

2. La validation au niveau des champs . . . . . . . . . . . . . . . . . . . . . . . . . 1812.1 Les propriétés de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1812.2 Les évènements de validation . . . . . . . . . . . . . . . . . . . . . . . . . . 182

2.2.1 KeyDown et KeyUp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1822.2.2 KeyPress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Page 8: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

7Table des matières

2.2.3 Validating et Validated . . . . . . . . . . . . . . . . . . . . . . . . . . 183

3. La validation au niveau du formulaire. . . . . . . . . . . . . . . . . . . . . . . . 185

4. Les méthodes de retour à l'utilisateur . . . . . . . . . . . . . . . . . . . . . . . . 1884.1 MessageBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1894.2 ErrorProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

Chapitre 11Création de contrôles utilisateurs

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

2. Les contrôles personnalisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

3. L'héritage de contrôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

4. Les contrôles utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

Chapitre 12Création d'applications Windows Modern UI

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

2. Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

3. Les outils de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

4. Le langage XAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

5. Une première application WPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2145.1 Les bases d’un projet WPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2145.2 Les contrôles et évènements . . . . . . . . . . . . . . . . . . . . . . . . . . . 2165.3 Les styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

Page 9: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

8Développez des applications Windows avec Visual Studio 2015

C# 6

Chapitre 13Débogage

1. Les types d'erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2211.1 Les erreurs de syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2211.2 Les erreurs d'exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2221.3 Les erreurs de logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

2. Le débogueur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2242.1 Contrôler l'exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2252.2 Les points d'arrêt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

2.2.1 Les conditions d'arrêt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2282.2.2 Le nombre d'accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2292.2.3 Le filtrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2302.2.4 Les actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

2.3 Les DataTips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2312.4 Les PerfTips. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2322.5 Les attributs Caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

3. Les fenêtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2353.1 La fenêtre Sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2363.2 La fenêtre Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2363.3 La fenêtre Automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2373.4 La fenêtre Espion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2373.5 La fenêtre Exécution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2383.6 Les autres fenêtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

Chapitre 14Gestion des exceptions

1. La classe Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

2. La création d'exceptions personnalisées . . . . . . . . . . . . . . . . . . . . . . 242

3. Le déclenchement des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

4. L'interception et la gestion des exceptions . . . . . . . . . . . . . . . . . . . . 246

Page 10: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

9Table des matières

Chapitre 15Monitoring

1. Le traçage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2531.1 Les classes Debug et Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2531.2 La collection d'écouteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

1.2.1 La création d'écouteurs. . . . . . . . . . . . . . . . . . . . . . . . . . . 2571.2.2 La sauvegarde des traces. . . . . . . . . . . . . . . . . . . . . . . . . . 257

1.3 Les commutateurs de trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2591.3.1 Le fonctionnement des commutateurs de trace . . . . . . . 2591.3.2 La configuration des commutateurs de trace . . . . . . . . . 261

2. Les journaux d'évènements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2622.1 L'interaction avec les journaux d'évènements. . . . . . . . . . . . . . 2622.2 La gestion des journaux d'évènements . . . . . . . . . . . . . . . . . . . 2632.3 L'écriture d'évènements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

3. Les compteurs de performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2653.1 La création de compteurs de performance . . . . . . . . . . . . . . . . 266

3.1.1 Depuis Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2663.1.2 Depuis le code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

3.2 L'utilisation de compteurs de performance. . . . . . . . . . . . . . . . 2693.3 L'analyse de compteurs de performance . . . . . . . . . . . . . . . . . . 271

Chapitre 16Tests unitaires

1. Introduction aux tests unitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2731.1 La création du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2731.2 Les classes de tests unitaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

2. La mise en place d'une série de tests . . . . . . . . . . . . . . . . . . . . . . . . . 2762.1 La création de tests au projet . . . . . . . . . . . . . . . . . . . . . . . . . . . 2762.2 Les Smart Unit Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2772.3 Le déroulement des tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

Page 11: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

10Développez des applications Windows avec Visual Studio 2015

C# 6

Chapitre 17Création du modèle de données

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

2. La création d'un modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

3. La création d'entités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

4. La génération de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . 290

5. La création d'entités à partir du code (Code First) . . . . . . . . . . . . . . 296

Chapitre 18Présentation de Entity Framework

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

2. Le mappage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3042.1 La couche logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3042.2 La couche conceptuelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3062.3 La couche de mappage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

3. Travailler avec les entités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3103.1 Les entités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3113.2 La classe ObjectContext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3143.3 Les relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

3.3.1 Le concept de table par type . . . . . . . . . . . . . . . . . . . . . . 3163.3.2 Le concept de table par hiérarchie . . . . . . . . . . . . . . . . . . 316

Chapitre 19Présentation de LINQ

1. Les requêtes LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3191.1 La syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3191.2 Les méthodes d'extension. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

Page 12: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

11Table des matières

2. Les opérateurs de requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3222.1 Filtrer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

2.1.1 Where . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3222.1.2 OfType<TResult> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3222.1.3 SelectMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3232.1.4 Skip et Take . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

2.2 Ordonner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3242.2.1 OrderBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3242.2.2 ThenBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

2.3 Grouper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3252.3.1 GroupBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3252.3.2 Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

2.4 Agréger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3262.5 Convertir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

3. Les requêtes parallèles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3273.1 Partitionner une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3283.2 Annuler une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

Chapitre 20LINQ to Entities

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

2. Extraire les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3322.1 L'extraction simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3322.2 L'extraction conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

3. Ajouter, modifier et supprimer des données . . . . . . . . . . . . . . . . . . . 3343.1 Ajouter des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3343.2 Modifier des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3353.3 Supprimer des données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3353.4 L'envoi des modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

Page 13: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

12Développez des applications Windows avec Visual Studio 2015

C# 6

Chapitre 21LINQ to SQL

1. La création de classes LINQ to SQL . . . . . . . . . . . . . . . . . . . . . . . . . 337

2. L'objet DataContext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3402.1 La méthode ExecuteQuery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3412.2 Utiliser des transactions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3412.3 Les autres membres de DataContext . . . . . . . . . . . . . . . . . . . . 342

3. Exécuter des requêtes avec LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 3433.1 Les requêtes simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3433.2 Les requêtes filtrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3443.3 Les requêtes de jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

4. Les procédures stockées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3444.1 L'ajout de procédures stockées au modèle. . . . . . . . . . . . . . . . . 3454.2 L'exécution de procédures stockées . . . . . . . . . . . . . . . . . . . . . . 346

Chapitre 22LINQ to XML

1. Les objets XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3471.1 XDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3471.2 XElement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3481.3 XNamespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3491.4 XAttribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3501.5 XComment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

2. Exécuter des requêtes avec LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 3512.1 Les requêtes simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3522.2 Les requêtes filtrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3522.3 Les requêtes de jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

Page 14: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

13Table des matières

Chapitre 23Le système de fichiers

1. Les classes de gestion du système de fichiers . . . . . . . . . . . . . . . . . . 3551.1 DriveInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3551.2 Directory et DirectoryInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3571.3 File et FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3591.4 Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

2. Travailler avec le système de fichiers . . . . . . . . . . . . . . . . . . . . . . . . 3652.1 Les objets Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3652.2 La classe FileStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3652.3 Lire un fichier texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

2.3.1 Lire avec la classe File . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3672.3.2 Lire avec la classe StreamReader . . . . . . . . . . . . . . . . . . . 368

2.4 Écrire dans un fichier texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3702.4.1 Écrire avec la classe File . . . . . . . . . . . . . . . . . . . . . . . . . . 3702.4.2 Écrire avec la classe StreamWriter . . . . . . . . . . . . . . . . . . 371

Chapitre 24Sérialisation

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

2. La sérialisation binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3742.1 Les bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3742.2 Contrôler la sérialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

2.2.1 Le contrôle par attribut . . . . . . . . . . . . . . . . . . . . . . . . . . 3762.2.2 Le contrôle par interface. . . . . . . . . . . . . . . . . . . . . . . . . . 378

3. La sérialisation XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3813.1 Les bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3823.2 Contrôler la sérialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3853.3 La sérialisation XML SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

Page 15: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

14Développez des applications Windows avec Visual Studio 2015

C# 6

Chapitre 25Expressions régulières

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

2. Une première expression régulière. . . . . . . . . . . . . . . . . . . . . . . . . . . 390

3. Les options de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

4. Les caractères d'échappement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

5. Les ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

6. Les groupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

7. Les ancres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

8. Les quantifieurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

Chapitre 26Multi-threading

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397

2. La classe Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3982.1 Créer un thread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3982.2 Suspendre ou annuler un thread . . . . . . . . . . . . . . . . . . . . . . . . 3992.3 Échanger des données avec un thread . . . . . . . . . . . . . . . . . . . . 4002.4 Verrouiller un thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4032.5 Priorité des threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

3. Fonctions asynchrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4053.1 Task et Task<TResult> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4063.2 async et await . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

4. Le composant BackgroundWorker . . . . . . . . . . . . . . . . . . . . . . . . . . 410

Page 16: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

15Table des matières

Chapitre 27Globalisation et localisation

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

2. La culture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

3. La globalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

4. La localisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417

Chapitre 28Sécurité

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

2. Les éléments de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4222.1 L'interface IPermission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4222.2 La classe CodeAccessPermission . . . . . . . . . . . . . . . . . . . . . . . . 4222.3 L'interface IPrincipal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

3. Implémentation de la sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4243.1 La sécurité basée sur les rôles . . . . . . . . . . . . . . . . . . . . . . . . . . . 424

3.1.1 Sécurité impérative. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4253.1.2 Sécurité déclarative. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

3.2 La sécurité basée sur les droits d'accès . . . . . . . . . . . . . . . . . . . . 4273.2.1 Sécurité impérative. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4273.2.2 Sécurité déclarative. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

4. Introduction à la cryptographie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

Chapitre 29Pour aller plus loin

1. Le dessin avec GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4331.1 La classe Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434

1.1.1 Les coordonnées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4341.1.2 Les formes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435

Page 17: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

16Développez des applications Windows avec Visual Studio 2015

C# 6

1.2 La structure Color et les classes Brush et Pen . . . . . . . . . . . . . . 4371.2.1 La structure Color. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4371.2.2 La classe Brush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4381.2.3 La classe Pen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4381.2.4 Les paramètres système . . . . . . . . . . . . . . . . . . . . . . . . . . 439

1.3 Les exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4391.3.1 L'affichage de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4391.3.2 Redimensionner une image . . . . . . . . . . . . . . . . . . . . . . . 441

2. Le remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4422.1 Le principe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4422.2 L'implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443

2.2.1 La couche commune. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4432.2.2 L'application serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4442.2.3 L'application cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

3. La reflection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4503.1 La classe System.Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4503.2 Charger un assemblage dynamiquement . . . . . . . . . . . . . . . . . 452

3.2.1 L'énumération des types . . . . . . . . . . . . . . . . . . . . . . . . . 4523.2.2 L'instanciation d'objets. . . . . . . . . . . . . . . . . . . . . . . . . . . 4533.2.3 L'utilisation des membres. . . . . . . . . . . . . . . . . . . . . . . . . 454

Chapitre 30Assemblages et configurations

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

2. Les assemblages privés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

3. Les assemblages partagés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460

4. Les fichiers de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462

Page 18: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

17Table des matières

Chapitre 31Déploiement

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465

2. Les projets de déploiement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4662.1 XCOPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4662.2 Projet CAB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4672.3 Projet de module de fusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4682.4 Projet d'installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468

3. L'assistant Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469

4. Configuration du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4734.1 Les propriétés du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4734.2 Les éditeurs de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . 476

4.2.1 Éditeur du système de fichiers . . . . . . . . . . . . . . . . . . . . . 4774.2.2 Éditeur du registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4784.2.3 Éditeur des types de fichiers. . . . . . . . . . . . . . . . . . . . . . . 4794.2.4 Éditeur de l'interface utilisateur. . . . . . . . . . . . . . . . . . . . 4814.2.5 Éditeur des actions personnalisées. . . . . . . . . . . . . . . . . . 4834.2.6 Éditeur des conditions de lancement. . . . . . . . . . . . . . . . 484

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487

Page 19: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

193

Chapitre 11

Création de contrôles utilisateurs

Création de contrôles utilisateurs

1. Introduction

Le développement d'applications est principalement basé sur les contrôles, ilsfournissent des fonctionnalités distinctes sous une forme visuelle permettantà l'utilisateur d'interagir avec eux. Tous ces contrôles dérivent à un niveau plusou moins lointain de la classe de base System.Windows.Forms.Control.Visual Studio propose l'intégration de contrôles tiers par l'ajout à la boîte àoutils. Mais si le besoin est très spécifique, il est possible de créer ses proprescontrôles.

La classe de base des contrôles, Control, fournit les fonctionnalités de basequi sont nécessaires, notamment pour les entrées utilisateurs via le clavier etla souris. Cela implique donc des propriétés, des méthodes et des évènementscommuns à tous les contrôles. Néanmoins, cette classe de base ne fournit pasla logique d'affichage du contrôle.

Il existe trois modes de création de contrôle :

– Les contrôles personnalisés.

– L'héritage de contrôles.

– Les contrôles utilisateurs.

Page 20: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

© E

dit

ions

EN

I -

All r

ights

rese

rved

194Développez des applications Windows avec Visual Studio 2015

C# 6

La création de contrôles s'inscrit dans le principe de réutilisation du code. Lalogique est créée en un seul endroit et peut être utilisée plusieurs fois. L'avan-tage est d'autant plus important pour la maintenance d'application car pourchanger le comportement de ce contrôle, il n'y aura qu'un fichier à modifier.

2. Les contrôles personnalisés

Ces contrôles offrent les plus grandes possibilités de personnalisation tant auniveau graphique que logique. Un contrôle personnalisé hérite directement dela classe Control. Il est donc nécessaire d'écrire toute la logique d'affichagece qui, suivant le résultat attendu, peut être une phase très longue et compli-quée. Les méthodes, propriétés et évènements doivent également être définispar le développeur.

La classe de base Control expose l'évènement Paint. C'est celui-ci qui estlevé lorsque le contrôle est généré et cela implique l'exécution du gestionnairede l'évènement par défaut OnPaint. Cette méthode reçoit un paramètreunique du type PaintEventArgs contenant les informations requises sur lasurface de dessin du contrôle. Le type PaintEventArgs possède deuxpropriétés, Graphics du type System.Drawing.Graphics etClipRectangle du type System.Drawing.Rectangle. Pour ajouter lalogique de dessin au contrôle, il faut surcharger la méthode OnPaint et yajouter le code de dessin :

protected override void OnPaint (System.Windows.Forms.PaintEventArgs e){ // Code de dessin du contrôle}

La propriété Graphics de l'objet PaintEventArgs représente la surface ducontrôle tandis que la propriété ClipRectangle représente la zone devantêtre dessinée. Lors de la première représentation du contrôle, la propriétéClipRectangle représente les limites du contrôle. Ces limites peuventensuite être modifiées, par exemple si un contrôle au dessus en cache unepartie de telle sorte que le contrôle ait besoin d'être redessiné. La partieClipRectangle représentera la région à modifier.

Page 21: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

195Création de contrôles utilisateursChapitre 11

Créez un dossier Controls à la racine du projet et ajoutez une nouvelle classenommée CustomControl définie de la manière suivante :

using System.Drawing;

namespace SelfMailer.Controls{ public class CustomControl : System.Windows.Forms.Control { protected override void OnPaint (System.Windows.Forms.PaintEventArgs e) { Rectangle R = new Rectangle(0, 0, this.Size.Width, this.Size.Height); e.Graphics.FillRectangle(Brushes.Green, R); } }}

Dans le constructeur du formulaire MailServerSettings, ajoutez le coded'instanciation du contrôle personnalisé :

Controls.CustomControl C = new Controls.CustomControl();C.Location = new System.Drawing.Point(0, 0);C.Size = this.Size;this.Controls.Add(C);

Ce code instancie un nouveau contrôle du type CustomControl, lui affectela position en haut à gauche et définit sa taille à celle du formulaire. Pour finir,le contrôle est ajouté à la collection des contrôles du formulaire.

Lancez l'application ([F5]) et ouvrez le formulaire des paramètres de serveurmail pour voir que le contrôle, qui représente un simple rectangle vert, remplitle formulaire comme une couleur de fond.

Remarque

Les possibilités de dessin avec GDI+ seront abordées plus loin dans cetouvrage, à la section Le dessin avec GDI+ du chapitre Pour aller plus loin.

Il suffit ensuite d'ajouter les membres requis pour la logique du contrôle afinde le finaliser.

Page 22: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

© E

dit

ions

EN

I -

All r

ights

rese

rved

196Développez des applications Windows avec Visual Studio 2015

C# 6

3. L'héritage de contrôles

Si le but est d'étendre les fonctionnalités d'un contrôle existant, que ce soit uncontrôle du Framework .NET ou d'un éditeur tiers, la manière la plus rapideest d'hériter de ce contrôle. Le nouveau contrôle possède ainsi tous lesmembres et la représentation visuelle de sa classe parente. Il n'y a plus qu'àrajouter la logique de traitement. Au même titre que les contrôles personnali-sés, il reste possible de surcharger la méthode OnPaint pour modifier l'aspectvisuel du contrôle.

Si une application comporte plusieurs formulaires qui requièrent un emailcomme champ de saisie, il serait préférable de créer un contrôle héritant de laclasse TextBox et d'y implémenter la logique de validation puis d'ajouter cecontrôle aux formulaires de manière à ne pas répéter le code de validation danschacun d'eux.

La création d'un contrôle hérité se fait de la même manière qu'un contrôle per-sonnalisé, en créant une classe qui va hériter du contrôle ayant le comporte-ment de base souhaité. Créez la classe EmailTextBox dans le dossierControls et faites-la hériter de la classe TextBox :

public class EmailTextBox : System.Windows.Forms.TextBox{}

Ajoutez une surcharge de la méthode OnValidating pour effectuer les véri-fications sur le format et ajoutez le code de la méthodeFromEmail_Validating du formulaire MailServerSettings :

protected override void OnValidating(System.ComponentModel.CancelEventArgs e){ base.OnValidating(e); string pattern = @"ˆ([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\." + @"[0-9]{1,3}\.[0-9]{1,3}\.)|" + @"(([a-zA-Z0-9\-]+\.)+))" + @"([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; Regex reg = new Regex(pattern); if (!reg.IsMatch(this.Text)) { this.BackColor = Color.Bisque; e.Cancel = true;

Page 23: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

197Création de contrôles utilisateursChapitre 11

} else this.BackColor = this.PreviousBackColor;}

Des modifications sont à apporter car on n'accède plus à la propriété Text ducontrôle à partir du formulaire. Il faut donc remplacer :

this.FromEmail.Text

par un accès direct :

this.Text

La première instruction :

base.OnValidating(e);

permet d'appeler la méthode de validation de la classe de base. Ainsi, il y a unepremière validation par la classe de base puis il y a validation du contrôle parle code supplémentaire.

La dernière chose notable est que le composant ErrorProvider n'est plus aumême niveau. Pour signaler à l'utilisateur que le champ est invalide, au lieud'afficher une icône, la couleur de fond du contrôle est modifiée. La propriétéPreviousBackColor, initialisée avec la couleur de fond de base dans leconstructeur, permet de la conserver afin de la réaffecter au contrôle en cas desuccès de la validation :

protected Color PreviousBackColor { get; set; }

public EmailTextBox(){ this.PreviousBackColor = this.BackColor;}

Le gestionnaire d'évènements FromEmail_Validating est devenu inutilepuisque la validation se fait au sein du contrôle. De plus, vous pouvezsupprimer le contrôle de type TextBox pour la saisie de l'email de l'expéditeuret le remplacer par un contrôle de type EmailTextBox qui a été ajouté parVisual Studio dans la boîte à outils sous le groupe Composants SelfMailer(où SelfMailer représente le nom du projet).

Page 24: C# 6 - Développez des applications Windows avec Visual ...multimedia.fnac.com/multimedia/editorial/pdf/9782746097001.pdf · 2 Développez des applications Windows avec Visual Studio

© E

dit

ions

EN

I -

All r

ights

rese

rved

198Développez des applications Windows avec Visual Studio 2015

C# 6

Lancez l'application ([F5]) pour tester la fonctionnalité.

4. Les contrôles utilisateurs

Le but d'un contrôle utilisateur est de regrouper de manière logique descontrôles afin d'obtenir une entité réutilisable. La création se fait par l'ajout auprojet d'un Contrôle utilisateur depuis la fenêtre d'ajout d'un nouvel élément.

Ajoutez un contrôle utilisateur nommé MailProperties dans le dossierControls du projet :