Programmation_Evenementielle

Embed Size (px)

Citation preview

  • 8/11/2019 Programmation_Evenementielle

    1/66

    Module 10 Programmation

    Evnementielle

    Page 1/66 OFPPT

    DRPS/ISGI LAYOUNE

    Module 10 Programmation vnementielle

    Propos par :A BENDAOUD

    www.cours-ofppt.net

  • 8/11/2019 Programmation_Evenementielle

    2/66

    Module 10 Programmation

    Evnementielle

    Page 2/66 OFPPT

    I. Table des matires I. Table des matires ................................................. 2

    II. Introduction ........................................................... 5

    III. Environnement de dveloppement intgr ............. 5A. L'interface de Visual Studio ........................................................ 51. Structure des applications.................................................................. 5

    2. Interface graphique .......................................................................... 5a) Fentre des proprits .............................................................................. 7b) L'diteur de code ..................................................................................... 7

    IV. Outils de dbogage ................................................. 8A. Les erreurs de syntaxe .............................................................. 8B.

    Les erreurs dexcution............................................................. 91.

    Erreur de conception : ..................................................................... 10

    2. Erreurs de lutilisateur: ................................................................... 10a) Capturer les erreurs avec Try Catch ....................................................... 10

    C. Les erreurs de logique : .......................................................... 111. Dbogage dune application............................................................. 11

    a) Suspendre lexcution............................................................................. 11

    b) Dbogage pas pas ............................................................................... 12

    V. Consulter laide..................................................... 12

    VI. Gnrer un fichier excutable ............................... 13

    VII. Rgles de ralisation dune interface.................... 14

    A. Les concepts de la programmation vnementielle ..................... 14

    1. Les consquences dune interface rate ............................................. 142. Les avantages dune interface russie............................................... 143. Multi-fentrage ............................................................................... 144. Les icnes ...................................................................................... 155. Les menus ..................................................................................... 15

    B.

    Applications SDI et MDI ........................................................... 15

    1. SDI ............................................................................................... 152. MDI .............................................................................................. 15

    VIII.

    Les bases des interfaces graphiques .................... 16

    A. Un premier projet ................................................................... 16

  • 8/11/2019 Programmation_Evenementielle

    3/66

    Module 10 Programmation

    Evnementielle

    Page 3/66 OFPPT

    B. Exemple pratique ................................................................... 20C. Les composants de base .......................................................... 301. Les proprits communes des objets ................................................. 30

    a) Name ................................................................................................... 30

    b) Text ..................................................................................................... 31

    c) Enabled ................................................................................................ 31

    d) Visible .................................................................................................. 31

    e) Font ..................................................................................................... 31

    f) BackColor ForeColor ............................................................................... 31

    2.

    Formulaire Form ............................................................................. 32

    a)

    Name ................................................................................................... 32

    b) Text ..................................................................................................... 32

    c) Icon ..................................................................................................... 32

    d) WindowState ......................................................................................... 32

    e) ControlBox ............................................................................................ 32

    f) MaximizeBox ......................................................................................... 32g) MinimizeBox .......................................................................................... 32

    h) FormBorderStyle .................................................................................... 32i) StartPosition .......................................................................................... 33

    j) Opacity ................................................................................................. 33

    k)

    Les dialogues modale et non modale ........................................................ 33

    l) Formulaire d'avant plan .......................................................................... 33

    m) Les vnements ..................................................................................... 33

    3. Etiquettes Label et boites de saisie TextBox ....................................... 354. Listes deroulantes ComboBox ........................................................... 395. Composant ListBox ......................................................................... 426. Cases a cocher CheckBox, boutons radio ButtonRadio ......................... 467. Variateurs ScrollBar ........................................................................ 488. vnements souris .......................................................................... 50

    9. Crer une fentre avec menu ........................................................... 5310. Composants non visuels ............................................................... 56

    a) Boites de dialogue OpenFileDialog et SaveFileDialog ................................... 56

    b) Boites de dialogue FontColor et ColorDialog ............................................... 60

    11. Timer ......................................................................................... 6212. Regroupement de contrles ........................................................... 65

    a) GroupBox et Panel ................................................................................. 65b) PictureBox ............................................................................................. 65

    c) TabControl ............................................................................................ 65

  • 8/11/2019 Programmation_Evenementielle

    4/66

    Module 10 Programmation

    Evnementielle

    Page 4/66 OFPPT

  • 8/11/2019 Programmation_Evenementielle

    5/66

    Module 10 Programmation

    Evnementielle

    Page 5/66 OFPPT

    I. IntroductionLobjectif de ce module est de prsenter les concepts fondamentaux de la programmationvnementielle ainsi que les lments ncessaires une bonne prise en main de la plate formede dveloppement Microsoft .Net ainsi que des environnements classiques qui y sont ddis.

    II. Environnement de dveloppement intgr

    A. L'interface de Visual Studio

    1. Structure des applicationsLa premire chose faire, c'est d'assimiler l'architecture des difices que nous allons crer etle vocabulaire qui va avec.Une application C#, c'est :

    Un ensemble de fichiers formant ce qu'on appelle le code source, crit dans le

    langage C#.

    Un fichier excutable, produit partir de ce code source. Rappelons que le faitd'engendrer un fichier excutable partir du code source s'appelle la compilation.

    Le point de dpart d'une application C#, c'est une solution. Lorsqu'on cre une

    nouvelle solution, C# demande pour celle-ci un nom et un rpertoire. Une solution est un fichier *.slncontenant les informations de la solution. Dans une solution C#, nous allons devoir insrer nos applications, c'est--dire nos

    projets. Si on le souhaite, une mme solution peut contenir plusieurs projets.

    Dans chaque projet il ya un certain nombre d'lments de base. Ces lments sont,pour l'essentiel, des Form, ou formulaires. Une application Windows basiquecompte un seul formulaire, et une application complexe peut en rassemblerplusieurs dizaines. Chaque formulaire sera sauvegard dans un fichier diffrent,dont l'extension sera *.cs. Il faut noter que c'est dans ces fichiers *.cs que setrouve le code proprement dit.

    2. Interface graphiqueLes produits de la gamme Visual Studio partagent le mme environnement de dveloppementintgr (IDE). L'IDE est compos de plusieurs lments : la barre d'outils Menu, la barred'outils Standard, diffrentes fentres Outil ancres ou masques automatiquement sur lesbords gauche, infrieur et droit, ainsi que l'espace d'diteur. Les fentres Outil, menus etbarres d'outils disponibles varient en fonction du type de projet ou de fichier dans lequel voustravaillez.

    Lorsqu'on va la programmer via Visual Studio, une application va donc toujours pouvoir treaborde sous deux angles complmentaires :

    Laspect graphique, visuel, bref, son interface. Dans la fentre principale de C#,nous pourrons facilement aller piocher les diffrents objets que nous voulons voir

  • 8/11/2019 Programmation_Evenementielle

    6/66

    Module 10 Programmation

    Evnementielle

    Page 6/66 OFPPT

    figurer dans notre application, les poser sur notre formulaire, modifier leurs

    proprits par dfaut, etc :

    Le code proprement dit, o nous allons entrer les diffrentes procdures en rapport

    avec le formulaire en question :

  • 8/11/2019 Programmation_Evenementielle

    7/66

    Module 10 Programmation

    Evnementielle

    Page 7/66 OFPPT

    a) Fentre des proprits

    Chaque fois qu'un contrle (ou plusieurs) est slectionn, la fentre des proprits (situe enstandard droite de l'cran) affiche les valeurs associes ce contrle. C'est--dire que semettent jour la liste des proprits et la valeur de ces proprits.

    b) L'diteur de codePassons au code. Visual Studio, dans sa grande magnanimit, va tcher de faire au mieux pournous faciliter la vie. Il va en fait dcrypter notre code au fur et mesure de sa rdaction, etnous donner en temps rel des indications via des codes de couleur, comme on peut le voir surl'image ci-dessus. Ainsi :

    Les mots-cls du langage seront ports en bleu.

    Les commentaires seront en vert.

    Enfin, toute ligne comportant une faute de syntaxe, ou posant un problme aucompilateur, sera immdiatement souligne.

  • 8/11/2019 Programmation_Evenementielle

    8/66

    Module 10 Programmation

    Evnementielle

    Page 8/66 OFPPT

    III. Outils de dbogageCette section prsente les outils de dbogage offerts par la plate forme, nous ferons lesillustrations partir de Visual Studio 2008.En programmation on rencontre trois types derreurs qui sont :

    Les erreurs de syntaxe

    Les erreurs dexcution

    Les erreurs de logique

    A. Les erreurs de syntaxeElles surviennent en mode conception quand on tape le code:

    Exemples :

    Dans ces cas C# souligne en ondul rouge le code. Il faut mettre le curseur sur le motsoulign, l'explication de l'erreur apparat.

    Exemple: Proprit Text d'un label mal orthographie:

    Il faut les corriger immdiatement en tapant le bon code (ici 'Text').

    En bas il y a aussi une fentre; "liste des erreurs":

  • 8/11/2019 Programmation_Evenementielle

    9/66

    Module 10 Programmation

    Evnementielle

    Page 9/66 OFPPT

    Elle affiche tous les problmes; pour atteindre le code correspondant une de ces erreurs,

    double-cliquez sur une des lignes de la liste.

    Si vous excuter le programme dans l'IDE alors quil y a un problme, C# demande si on veutexcuter la dernire gnration russie:

    Si vous tapez 'oui' C# excute la dernire version qui a t gnre correctement, mais PASde code source actuel qui contient des erreurs!!

    B.Les erreurs dexcutionElles surviennent en mode Run ou lors de l'utilisation de l'excutable: une instruction ne

    peut pas tre effectue. Quand on utilise l'excutable: Le logiciel s'arrte brutalement,c'est trs gnant!! Pour l'utilisateur c'est un 'BUG' Il y a leve d'une exception, voila ceque cela donne dans l'IDE:

    Exemple: tenter d'accder un lment d'un tableau qui n'existe pas (l'indice est trop grandcela entrane une exception 'OutOfRange'):

  • 8/11/2019 Programmation_Evenementielle

    10/66

  • 8/11/2019 Programmation_Evenementielle

    11/66

    Module 10 Programmation

    Evnementielle

    Page 11/66 OFPPT

    C. Les erreurs de logique :Le programme fonctionne, pas d'erreurs apparentes, mais les rsultats sont errons, faux.Il faut faire des tests dans les conditions relles avec des donnes courantes, mais aussi avecdes donnes remarquables pour voir si les rsultats sont cohrents et exacts. Une fois l'erreurtrouve, il faut en dterminer la cause et la corriger.Pour cela il faut analyser le fonctionnement du programme pas pas, instruction parinstruction en surveillant la valeur des variables

    1. Dbogage dune applicationLes erreurs de logique sont plus difficiles dtecter. Le code est syntaxiquement correct,

    mais il ne ralise pas les oprations prvues. C'est l qu'intervient le dbogage afin dediagnostiquer l'origine de l'erreur.

    Pour dboguer, il faut lancer l'excution du programme puis,

    A. Suspendre l'excution certains endroits du code.

    B. Voir ce qui se passe puis faire avancer le programme pas pas.

    C. Afficher des informations de dbogage quand le programme tourne.

    a) Suspendre lexcution

    Pour dmarrer et arrter l'excution, on utilise les boutons suivants:

    On lance le programme avec le premier bouton, on le suspend avec le second, on l'arrtedfinitivement avec le troisime, et le dernier bouton permet de redmarrer le dbogage.On peut suspendre (l'arrter temporairement) le programme:

    Avec le second bouton.

    Grce des points d'arrt (pour dfinir un point d'arrt en mode de conception,cliquez en face d'une ligne dans la marge grise: la ligne est surligne en marron.Quand le code est excut, il s'arrte sur cette ligne marron).

  • 8/11/2019 Programmation_Evenementielle

    12/66

    Module 10 Programmation

    Evnementielle

    Page 12/66 OFPPT

    b)Dbogage pas pasQuand le programme est suspendu, on peut observer les variables, dplacer le pointd'excution, on peut aussi faire marcher le programme pas pas (instruction parinstruction) et observer l'volution de la valeur des variables, on peut enfin modifier lavaleur d'une variable afin de tester le logiciel avec cette valeur.

    F11 permet l'excution pas pas, instruction par instruction (y compris des procduresappeles: si il y a appel une autre procdure, le pas pas saute dans l'autreprocdure)

    F10 permet le pas pas (sans dtailler les procdures appeles: excute la procdureappele en une fois)

    IV. Consulter laideLa plupart des interfaces de dveloppement .Net offre un certain nombre ditem daidecommuns, pour cela utiliser le menu ? :

  • 8/11/2019 Programmation_Evenementielle

    13/66

    Module 10 Programmation

    Evnementielle

    Page 13/66 OFPPT

    V. Gnrer un fichier excutableLa gnration de lexcutable dans un environnement .Net seffectue au travers du menu Gnrer qui propose comme possibles options la Gnration de la solution ou sa Rgnration .

    Quand on choisit lune des deux options un excutable ainsi quune ou plusieurs Dll (DynamicLink Library) sont gnres et places dans un dossier situ la racine du projet et qui portele nom de Bin, dpendamment de loption de compilation choisi lexcutable sera plusspcifiquement dploy dans un sous dossier du dossier BIN intitul Debug ou Release.

  • 8/11/2019 Programmation_Evenementielle

    14/66

    Module 10 Programmation

    Evnementielle

    Page 14/66 OFPPT

    VI. Rgles de ralisation dune interfaceA. Les concepts de la programmation vnementielleLa programmation vnementielle est base sur linteraction avec lutilisateur de lapplication.Les diffrents objets de linterface vont tre manipuls indpendamment les uns des autres, enfonction de la tche quil souhaite raliser.Cest lutilisateur qui contrle lapplication. De ce fait lergonomie dune interface utilisateur estun des lments importants de lapplication.

    Elle peut tre dcline selon deux axes : La prsentation des informations lutilisateur et leur lisibilit ;

    Linteraction existant entre lutilisateur et lapplication.

    1. Les consquences dune interface rate

    Confusion (utilisateur perdu dans lapplication ne sachant plus o aller, ni que faire) ;

    Frustration (utilisateur ne sachant pas atteindre son but) ;

    Panique (peur de lutilisateur davoir perdu des donnes ou dtruit des fichiers) ;

    Stress (charge de travail et dinformations reues trop importante pour lutilisateur) ;

    Ennui (utilisateur fatigu davoir rpter des tapes fastidieuses et non productives)

    Sous-utilisation (utilisateur refusant de se servir dune application trop complexe) Sur-utilisation (application ncessitant de multiples aller-retour entre les fentres).

    2. Les avantages dune interface russie Acceptation (utilisateur sappropriant lapplicationplutt que de la rejeter) ; Utilisation (application utilise bon escient et de manire efficace) ;

    Formation rduite (apprentissage minimal par lutilisateur retrouvant les automatismeslis dautres applications).

    3. Multi-fentrage

    Windows est une interface graphique multi-fentres. Cest dire que lcran est fractionn enplusieurs parties o sexcutent les applications. Ces fentres peuvent se chevaucher, serecouvrir mutuellement ou tre disposes cte cte permettant ainsi de partager lespace detravail.

    Windows permet de travailler sur plusieurs applications la fois. Lenvironnement multi -contextes est la partie visible du multi-tches.Lutilisation du multi-contextes prsente par contre des dsagrments pour le dveloppeur.Chaque fentre et ainsi chaque application doit tre clairement identifie afin que lutilisateurpuisse aisment sy retrouver.

    De plus, plusieurs occurrences dune mme application peuvent fonctionner simultanment,chacune dentre elles devant tre repre. Cela implique que le programmeur devra rflchir son application en tenant compte de lenvironnement qui la supporte et devra rflchir la

  • 8/11/2019 Programmation_Evenementielle

    15/66

    Module 10 Programmation

    Evnementielle

    Page 15/66 OFPPT

    cohrence entre cette application et lenvironnement. Dans ces conditions deux remarques

    simposent : Lapplication devra pouvoir communiquer avec lenvironnement ;

    Lapplication ne devra pas monopoliser les ressources communes du systme.

    Lutilisateur doit toujours pouvoir passer dune application une autre, en dsignant la fentreo elle sexcute. Cette fentre passe alors au premier plan et devient active. Les autresfentres se retrouvant places larrire plan. La notion de fentre active implique que lesvnements en provenance du clavier ou de la souris lui sont destins.

    4. Les icnesLes objets sont reprsents par des icnes (petits dessins) plutt que par des libells. Lusagede ces icnes permet de rapprocher lenvironnement de travail de lenvironnement rel delutilisateur. Ces icnes vont permettre de transmettre un message lutilisateur parlintermdiaire dune mtaphore. Par exemple licne symbolisant une imprimante indique sansambigut une fonction dimpression.

    5. Les menusLutilisation de menus permet de proposer un processus bas sur lassociation objet/action. Onslectionne un objet, puis on dsigne laction que lon souhaite associer cet objet dans unmenu. Lavantage essentiel de ce processus rside dans la possibilit de combiner plusieursactions sans avoir redfinir lobjet. Ce processus est le mode dinteraction avec linterfa ce etse divise en trois phases :

    Dsignation de lobjet ;

    Choix de laction raliser ;

    Production du rsultat.

    B. Applications SDI et MDI

    1. SDILe SDI (Single Document Interface) est un mode de fonctionnement autorisant le chargementdun seul document la fois. Pour travailler sur nouveau document, lapplication doit aupralable fermer celui actuellement ouvert. Le principe des applications SDI est exploit dans

    le Bloc-notes de Windows.

    2. MDILe MDI (Multiple Document Interface) autorise louverture de plusieurs documents lintrieurdune mme application. Il dfinit le comportement des fentres documents lintrieur dunefentre mre ou fentre de lapplication. Les meilleurs exemples de lutilisation de fentres MDIse trouvent dans les outils bureautiques Word et Excel. Lintrt du principe MDI estsuffisamment manifeste pour lutiliser galement dans des applications de gestion. Il se justifiealors dans louverture simultane de plusieurs vues du systme dinformations de lentreprise.Dun point de vue technique, il permet de limiter les accs au rseau en stockanttemporairement sur le poste client les donnes.

  • 8/11/2019 Programmation_Evenementielle

    16/66

    Module 10 Programmation

    Evnementielle

    Page 16/66 OFPPT

    Pour crer un formulaire MDI parent au moment du design, Dans la fentre Proprits,

    affectez true la proprit IsMDIContainer. Ce faisant, vous dsignez le formulaire commele conteneur MDI des fentres enfants.

    Les formulaires MDI enfants reprsentent un lment essentiel des applications de type MDIcar ils constituent le centre de l'interaction utilisateur.Pour designer un formulaire comme MDI enfant :Form1f1= newForm1();f1.MdiParent = this;f1.Show();

    VII. Les bases des interfaces graphiquesNous nous proposons ici de donner les premiers lments pour construire des interfacesgraphiques et grer leurs vnements

    A. Un premier projetConstruisons un premier projet de type "Application windows" :

    [1] : crer un nouveau projet

    [2] : de type Application Windows[3] : le nom du projet importe peu pour le moment[4] : le projet cr

  • 8/11/2019 Programmation_Evenementielle

    17/66

    Module 10 Programmation

    Evnementielle

    Page 17/66 OFPPT

    [5] : on sauvegarde la solution courante[6] : nom du projet[7] : dossier de la solution[8] : nom de la solution[9] : un dossier sera cr pour la solution [Chap5]. Les projets de celle-ci seront dans dessous-dossiers.

    [10] : le projet [01] dans la solution [Chap5] : [Program.cs] est la classe principale du projet [Form1.cs] est le fichier source qui va grer le comportement de la fentre [11]

    [Form1.Designer.cs] est le fichier source qui va encapsuler l'information sur lescomposants de la fentre [11]

    [11] : le fichier [Form1.cs] en mode "conception" (design)[12] : l'application gnre peut tre excute par (Ctrl-F5). La fentre [Form1] s'affiche. Onpeut la dplacer, la redimensionner et la fermer. On a donc les lments de base d'une fentregraphique.

    La classe principale [Program.cs] est la suivante :

  • 8/11/2019 Programmation_Evenementielle

    18/66

    Module 10 Programmation

    Evnementielle

    Page 18/66 OFPPT

    ligne 2 : les applications avec formulaires utilisent l'espace de nomsSystem.Windows.Forms.

    ligne 4 : l'espace de noms initial a t renomm en Chap5. ligne 10 : l'excution du projet (Ctrl-F5), la mthode [Main] est excute. lignes 11-13 : la classe Application appartient l'espace de noms

    System.Windows.Forms. Elle contient des mthodes statiques pour lancer / arrter lesapplications graphiques windows.

    ligne 11 : facultative - permet de donner diffrents styles visuels aux contrles dposs

    sur un formulaire

    ligne 12 : facultative - fixe le moteur de rendu des textes des contrles : GDI+ (true),GDI (false)

    ligne 13 : la seule ligne indispensable de la mthode [Main] : instancie la classe[Form1] qui est la classe du formulaire et lui demande de s'excuter.

    Le fichier source [Form1.cs] est le suivant :

    ligne 5 : la classe Form1 drive de la classe [System.Windows.Forms.Form] qui est laclasse mre de toutes les fentres. Le mot cl partial indique que la classe est partielleet qu'elle peut tre complte par d'autres fichiers source. C'est le cas ici, o la classeForm1 est rpartie dans deux fichiers :

    - [Form1.cs] : dans lequel on trouvera le comportement du formulaire, notamment sesgestionnaires d'vnements

    - [Form1.Designer.cs] : dans lequel on trouvera les composants du formulaire et leursproprits. Ce fichier a la particularit d'tre rgnr chaque fois que l'utilisateurmodifie la fentre en mode [conception].

    lignes 6-8 : le constructeur de la classe Form1

  • 8/11/2019 Programmation_Evenementielle

    19/66

    Module 10 Programmation

    Evnementielle

    Page 19/66 OFPPT

    ligne 7 : fait appel la mthode InitializeComponent. On voit que cette mthode n'est

    pas prsente dans [Form1.cs]. On la trouve dans [Form1.Designer.cs].Le fichier source [Form1.Designer.cs] est le suivant :

    ligne 2 : il s'agit toujours de la classe Form1. On notera qu'il n'est plus besoin de

    rpter qu'elle drive de la classe Form. lignes 25-37 : la mthode InitializeComponent appele par le constructeur de la classe

    [Form1]. Cette mthode va crer et initialiser tous les composants du formulaire. Elle

    est rgnre chaque changement de celui-ci en mode [conception]. Une section,appele rgion, est cre pour la dlimiter lignes 19-39. Le dveloppeur ne doit pasajouter de code dans cette rgion : il sera cras la rgnration suivante.

    Il est plus simple dans un premier temps de ne pas s'intresser au code de[Form1.Designer.cs]. Il est gnr automatiquement et est la traduction en langage C# deschoix que le dveloppeur fait en mode [conception]. Prenons un premier exemple :

  • 8/11/2019 Programmation_Evenementielle

    20/66

    Module 10 Programmation

    Evnementielle

    Page 20/66 OFPPT

    [1] : slectionner le mode [conception] en double-cliquant sur le fichier [Form1.cs][2] : cliquer droit sur le formulaire et choisir [Properties][3] : la fentre des proprits de [Form1][4] : la proprit [Text] reprsente le titre de la fentre[5] : le changement de la proprit [Text] est pris en compte en mode [conception] ainsi quedans le code source [Form1.Designer.cs] :

    B. Exemple pratiqueNous commenons un nouveau projet appel 02. Pour cela nous suivons la procdureexplicite prcdemment pour crer un projet. La fentre crer est la suivante :

    Les composants du formulaire sont les suivants :

  • 8/11/2019 Programmation_Evenementielle

    21/66

    Module 10 Programmation

    Evnementielle

    Page 21/66 OFPPT

    On pourra procder comme suit pour construire cette fentre :

    [1] : cliquer droit sur le formulaire en-dehors de tout composant et choisir l'option [Properties][2] : la feuille de proprits de la fentre apparat dans le coin infrieur droit de Visual studio

    Parmi les proprits du formulaire noter :

    Ici, nous fixons les proprits Text et Name :

  • 8/11/2019 Programmation_Evenementielle

    22/66

    Module 10 Programmation

    Evnementielle

    Page 22/66 OFPPT

    [1] : choisir la bote outils [Common Controls] parmi les botes outils proposes par Visual

    Studio[2, 3, 4] : double-cliquer successivement sur les composants [Label], [Button] et [TextBox][5] : les trois composants sont sur le formulaire

    Pour aligner et dimensionner correctement les composants, on peut utiliser les lments de labarre d'outils :

    Le principe du formatage est le suivant :1. slectionnez les diffrents composants formater ensemble (touche Ctrl appuye

    pendant les diffrents clics slectionnant les composants).2. slectionnez le type de formatage dsir :

    les options Align permettent d'aligner des composants par le haut, le bas, le ctgauche ou droit, le milieu.

    les options Make Same Size permettent que des composants aient la mme hauteur oula mme largeur.

    l'option Horizontal Spacing permet d'aligner horizontalement des composants avec des

    intervalles entre eux de mme largeur. Idem pour l'option Vertical Spacing pour alignerverticalement.

  • 8/11/2019 Programmation_Evenementielle

    23/66

    Module 10 Programmation

    Evnementielle

    Page 23/66 OFPPT

    l'option Center permet de centrer un composant horizontalement (Horizontally) ou

    verticalement (Vertically) dans la fentre

    Une fois placs les composants nous fixons leurs proprits. Pour cela, cliquer droit sur lecomposant et prendre l'option Properties :

    [1] : slectionner le composant pour avoir sa fentre de proprits. Dans celle-ci, modifier lesproprits suivantes : name : labelSaisie, text : Saisie[2] : procder de mme : name : textBoxSaisie, text : ne rien mettre[3] : name : buttonAfficher, text :Afficher[4] : la fentre elle-mme : name : frmSaisiesBoutons, text : Saisies et boutons - 1[5] : excuter (Ctrl-F5) le projet pour avoir un premier aperu de la fentre en action.

    Ce qui a t fait en mode [conception] a t traduit dans le code de [Form1.Designer.cs] :

  • 8/11/2019 Programmation_Evenementielle

    24/66

    Module 10 Programmation

    Evnementielle

    Page 24/66 OFPPT

    lignes 53-55 : les trois composants ont donn naissance trois champs privs de laclasse [Form1]. On notera que les noms de ces champs sont les noms donns auxcomposants en mode [conception]. C'est le cas galement du formulaire.

    ligne 2 qui est la classe elle-mme. lignes 7-9 : les trois objets de type [Label], [TextBox] et [Button] sont crs. C'est

    travers eux que les composants visuels sont grs. lignes 14-19 : configuration du label labelSaisie lignes 23-29 : configuration du bouton buttonAfficher lignes 33-36 : configuration du champ de saisie textBoxSaisie lignes 40-47 : configuration du formulaire frmSaisiesBoutons. On notera, lignes 43-45,

    la faon d'ajouter des composants au formulaire.

    Ce code est comprhensible. Il est ainsi possible de construire des formulaires par code sansutiliser le mode [conception]. De nombreux exemples de ceci sont donns dans ladocumentation MSDN de Visual Studio. Matriser ce code permet de crer des formulaires encours d'excution : par exemple, crer la vole un formulaire permettant la mise jour d'unetable de base de donnes, la structure de cette table n'tant dcouverte qu' l'excution.

  • 8/11/2019 Programmation_Evenementielle

    25/66

    Module 10 Programmation

    Evnementielle

    Page 25/66 OFPPT

    Il nous reste crire la procdure de gestion d'un clic sur le bouton Afficher. Slectionner le

    bouton pour avoir accs sa fentre de proprits. Celle-ci a plusieurs onglets :

    [1] : liste des proprits par ordre alphabtique

    [2] : vnements lis au contrle

    Les proprits et vnements d'un contrle sont accessibles par catgories ou par ordrealphabtique :

    [3] : Proprits ou vnements par catgorie[4] : Proprits ou vnements par ordre alphabtique

    L'onglet Events en mode Catgories pour le bouton buttonAfficher est le suivant :

    [1] : la colonne de gauche de la fentre liste les vnements possibles sur le bouton. Un clicsur un bouton correspond l'vnement Click.[2] : la colonne de droite contient le nom de la procdure appele lorsque l'vnementcorrespondant se produit.[3] : si on double-clique sur la cellule de l'vnement Click, on passe alors automatiquementdans la fentre de code pour crire le gestionnaire de l'vnement Click sur le boutonbuttonAfficher :

  • 8/11/2019 Programmation_Evenementielle

    26/66

    Module 10 Programmation

    Evnementielle

    Page 26/66 OFPPT

    Lignes 10-12 : le squelette du gestionnaire de l'vnement Click sur le bouton nomm

    buttonAfficher. On notera les points suivants : la mthode est nomme selon le schma nomDuComposant_NomEvenement la mthode est prive. Elle reoit deux paramtres :

    sender : est l'objet qui a provoqu l'vnement. Si la procdure est excute la suited'un clic sur le bouton buttonAfficher, sender sera gal buttonAfficher. On peutimaginer que la procdure buttonAfficher_Click soit excute partir d'une autreprocdure. Celle-ci aurait alors tout loisir de mettre comme premier paramtre, l'objetsenderde son choix.

    EventArgs : un objet qui contient des informations sur l'vnement. Pour un vnementClick, il ne contient rien.

    Pour un vnement ayant trait aux dplacements de la souris, on y trouvera les coordonnes(X,Y) de la souris. Nous n'utiliserons aucun de ces paramtres ici.

    Ecrire un gestionnaire d'vnement consiste complter le squelette de code prcdent. Ici,nous voulons prsenter une bote de dialogue avec dedans, le contenu du champ textBoxSaisies'il est non vide [1], un message d'erreur sinon [2] :

  • 8/11/2019 Programmation_Evenementielle

    27/66

    Module 10 Programmation

    Evnementielle

    Page 27/66 OFPPT

    Le code ralisant cela pourrait-tre le suivant :

    La classe MessageBox sert afficher des messages dans une fentre. Nous avons utilis ici lamthode Show suivante :

    Avec :

    Le paramtre buttons peut prendre ses valeurs parmi les constantes suivantes (prfixes parMessageBoxButtons comme montr ligne 7) ci-dessus :

  • 8/11/2019 Programmation_Evenementielle

    28/66

    Module 10 Programmation

    Evnementielle

    Page 28/66 OFPPT

  • 8/11/2019 Programmation_Evenementielle

    29/66

    Module 10 Programmation

    Evnementielle

    Page 29/66 OFPPT

    Le paramtre icon peut prendre ses valeurs parmi les constantes suivantes (prfixes parMessageBoxIcon comme montr ligne 7) ci-dessus :

  • 8/11/2019 Programmation_Evenementielle

    30/66

    Module 10 Programmation

    Evnementielle

    Page 30/66 OFPPT

    La mthode Show est une mthode statique qui rend un rsultat de type[System.Windows.Forms.DialogResult] qui est une numration :

    Pour savoir sur quel bouton a appuy l'utilisateur pour fermer la fentre de type MessageBoxon crira :

    C. Les composants de baseNous prsentons maintenant diverses applications mettant en jeu les composants les pluscourants afin de dcouvrir les principales mthodes et proprits de ceux-ci. Pour chaqueapplication, nous prsentons l'interface graphique et le code intressant, principalement celuides gestionnaires d'vnements.

    1. Les proprits communes des objetsCelles hrites de la Classe Control' quil faut connatre:

    a) Name

    Il sagit du nom de lobjet tel quil est gr par lapplication. Par dfaut, C# baptise tous lesobjets que vous crez de noms gnriques, comme Form1, Form2, Form3 pour les fentres,List1, List2 pour les listes...

    Il est vivement conseill, avant toute autre chose, de rebaptiser les objets que vous venez decrer afin de donner des noms plus vocateurs. Le bouton sur lequel est crit OK seranomm BoutonOK. La liste qui affiche les utilisateurs sera nomme ListUtilisateurs. Il estconseill de dbuter le nom de lobjet par un mot voquant sa nature: BoutonOkou BtOkouButtonOk, btnOkcest comme vous voulez.

    Microsoft conseille:

    Btn : pour les Boutons

  • 8/11/2019 Programmation_Evenementielle

    31/66

    Module 10 Programmation

    Evnementielle

    Page 31/66 OFPPT

    Lst : pour les ListBox

    chk : pour les CheckBoxcbo : pour les combosdlg : pour les DialogBox

    frm : pour les Form

    lbl : pour les labels

    txt : pour les Textbox

    tb : pour les Toolsbarrb : pour les radiobutton

    mm : pour les menustmr : pour les timers

    b) Text

    Il sagit du texte qui est associ lobjet. Dans le cas dune fentre cest le texte qui apparatdans la barre de titre en haut. Pour un TextBox ou un Label cest videment le texte qui estaffich. On peut modifier cette proprit en mode conception ou dans le codeExemple :Avec du code comment faire pour que le bouton ButtonOk porte linscription OkButtonOk.Text = "OK";

    c) Enabled

    Accessible, Indique si un contrle peut rpondre une interaction utilisateur. La propritEnabled permet l'activation ou la dsactivation des contrles au moment de l'excution.Exemple :dsactiver le ButtonOkButtonOk.Enabled = false;

    d) Visible

    Indique si un contrle est visible ou non. ButtonOk.Visible=False ; fait disparatre le bouton.Attention pour rendre visible une fentre on utilise la mthode .Show.

    e) Font

    Permet le choix de la police de caractres affiche dans lobjet.

    Exemple :ButtonOk.Font = newFont("Arial", 14);

    f) BackColor ForeColorCouleur du fond, Couleur de lavant plan Pour un bouton Forecolor correspond au cadre et auxcaractres.

    Exemple :ButtonOk.BackColor = Color.Blue;ButtonOk.ForeColor = Color.White;

  • 8/11/2019 Programmation_Evenementielle

    32/66

    Module 10 Programmation

    Evnementielle

    Page 32/66 OFPPT

    2. Formulaire FormNous commenons par prsenter le composant indispensable, le formulaire sur lequel ondpose des composants. Nous avons dj prsent quelques-unes de ses proprits de base.

    Une fentre possde des proprits qui peuvent tre modifies en mode design dans la fentre'Proprits' droite ou par du code :

    a) Name

    Nom du formulaire. Donner un nom explicite. FrmDemarrageDs quune fentre est cre onmodifie immdiatement ses proprits en mode conception pour lui donner laspect que londsire.

    b) TextCest le texte qui apparatra dans la barre de titre en haut. Text peut tre modifi par le code :Form1.text= "Fentre" ;

    c) Icon

    Proprit qui permet dassocier la Form un fichier icne. Cette icne saffiche dans la barrede titre, tout en haut gauche. Si la Form est la Form par dfaut du projet, cest galementcette icne qui Symbolisera votre application dans Windows.

    d) WindowState

    Donne ltat de la fentre :

    Plein cran : FormWindowState.MaximizedNormale : FormWindowState.Normal

    Dans la barre de tache : FormWindowState.MinimizedExemple :mettre une fentre en plein cran avec du codethis.WindowState = FormWindowState.Maximized ;

    e) ControlBox

    Si cette proprit comme valeur False, les boutons de contrle situs droite de la barre dela fentre napparaissent pas.

    f) MaximizeBox

    Si cette proprit comme valeur False, le boutons de contrle Plein cran situs droite dela barre de la fentre napparat pas.

    g) MinimizeBox

    Si cette proprit comme valeur False, le boutons de contrle Minimize situs droite de labarre de la fentre napparat pas.

    h) FormBorderStyle

    Permet de choisir le type des bords de la fentre : sans bord (None), bord simple (FixedSingle)ne permettant pas lutilisateur de modifier la taille de la fentre, bord permettant lamodification de la taille de la fentre (Sizable).

    Exemple :

  • 8/11/2019 Programmation_Evenementielle

    33/66

    Module 10 Programmation

    Evnementielle

    Page 33/66 OFPPT

    this.FormBorderStyle = FormBorderStyle.FixedSingle;

    i) StartPosition

    Permet de choisir la position de la fentre lors de son ouverture. Fentre au centre de lcran ?La position qui existait lors de la conception ...?

    Exemple :

    Formf1 = newForm();f1.Text = "titre";f1.StartPosition = FormStartPosition.CenterScreen ;f1.Show();

    j) Opacity

    Allant de 0% (0) 100% (1), permet de crer un formulaire plus ou moins transparent. Pour 0il est transparent, pour 1 il est totalement opaque (normal)

    Exemple :

    this.Opacity = 0.75;

    k) Les dialogues modale et non modale

    Au niveau des interfaces utilisateur on distingue deux types de dialogues : Les dialogues de type modal Les dialogues de type non modal

    Une boite de dialogue est dite modale lorsquelle permet daccder dautres composantsgraphiques de notre solution logicielle tandis quelle est encore affiche lcran. A linverse la

    boite de dialogue non modale bloque tout accs dautres formulaires de la solution jusqu cequelle soit ferme.

    Pour une boite de dialogue modale utiliser la mthode Show() et ShowDialog() pour une boitede dialogue non modale.Example:Formf1 = newForm();f1.Text = "Fentre 1";f1.Show();

    Formf2 = newForm();f2.Text = "Fentre 2";f2.ShowDialog();

    l) Formulaire d'avant planPour dfinir au moment de la conception un formulaire en tant que formulaire d'avant-pland'une application. l Dans la fentre Proprits, attribuez la proprit TopMost la valeur true.Pour dfinir par code un formulaire en tant que formulaire d'avant-plan d'une application. Dansune procdure, attribuez la proprit TopMost la valeur true : this.TopMost=true;

    m) Les vnements

    Nous nous attardons ici sur quelques vnements importants d'un formulaire.

  • 8/11/2019 Programmation_Evenementielle

    34/66

    Module 10 Programmation

    Evnementielle

    Page 34/66 OFPPT

    L'vnement Load se produit avant mme que le formulaire ne soit affich. L'vnementClosing se produit lorsque le formulaire est en cours de fermeture. On peut encore arrtercette fermeture par programmation.

    Nous construisons un formulaire de nom Form1 sans composant :

    [1] : le formulaire[2] : les trois vnements traitsLe code de [Form1.cs] est le suivant :

  • 8/11/2019 Programmation_Evenementielle

    35/66

    Module 10 Programmation

    Evnementielle

    Page 35/66 OFPPT

    Nous utilisons la fonction MessageBox pour tre averti des diffrents vnements.

    Ligne 10 : L'vnement Load va se produire au dmarrage de l'application avant mme que leformulaire ne s'affiche :

    Ligne 15 : L'vnement FormClosing va se produire lorsque l'utilisateur ferme la fentre.

    Ligne 19 : Nous lui demandons alors s'il veut vraiment quitter l'application :

    Ligne 20 : S'il rpond Non, nous fixons la proprit Cancel de l'vnement CancelEventArgs eque la mthode a reu en paramtre. Si nous mettons cette proprit False, la fermeture dela fentre est abandonne, sinon elle se poursuit L'vnement FormClosed va alors seproduire :

    3. Etiquettes Label et boites de saisie TextBoxNous avons dj rencontr ces deux composants. Label est un composant texte et TextBox uncomposant champ de saisie. Leur proprit principale est Text qui dsigne soit le contenu duchamp de saisie soit le texte du libell. Cette proprit est en lecture/criture.

    L'vnement habituellement utilis pour TextBox est TextChanged qui signale que l'utilisateur modifi le champ de saisie. Voici un exemple qui utilise l'vnement TextChanged poursuivre les volutions d'un champ de saisie :

  • 8/11/2019 Programmation_Evenementielle

    36/66

  • 8/11/2019 Programmation_Evenementielle

    37/66

    Module 10 Programmation

    Evnementielle

    Page 37/66 OFPPT

    ligne 24 : l'vnement [Form].Shown a lieu lorsque le formulaire est affich ligne 26 : on met alors le focus (pour une saisie) sur le composant textBoxSaisie. ligne 9 : l'vnement [TextBox].TextChanged se produit chaque fois que le contenu

    d'un composant TextBox change ligne 11 : on recopie le contenu du composant [TextBox] dans le composant [Label] ligne 14 : gre le clic sur le bouton [Effacer] ligne 16 : on met la chane vide dans le composant [TextBox]

    ligne 19 : gre le clic sur le bouton [Quitter] ligne 21 : pour arrter l'application en cours d'excution. On se rappelle que l'objet

    Application sert lancer l'application dans la mthode [Main] de [Form1.cs] :

    L'exemple suivant utilise un TextBox multilignes :

    La liste des contrles est la suivante :

    Pour qu'un TextBox devienne multilignes on positionne les proprits suivantes du contrle :

  • 8/11/2019 Programmation_Evenementielle

    38/66

    Module 10 Programmation

    Evnementielle

    Page 38/66 OFPPT

    L'application permet de taper des lignes directement dans [1] ou d'en ajouter via [2] et [3].

    Le code de l'application est le suivant :

    ligne 18 : lorsque le formulaire est affich (vt Shown), on met le focus sur le champ desaisie textBoxLigne

    ligne 10 : gre le clic sur le bouton [Ajouter] ligne 12 : le texte du champ de saisie textBoxLigne est ajout au texte du champ de

    saisie textBoxLignes suivi d'un saut de ligne. ligne 13 : le champ de saisie textBoxLigne est effac

    Parmi multiples proprits du contrle TextBox on peut signaler : PaswordChar : crypte le texte entr sous forme dtoiles.

    Exemple :textBox1.PasswordChar = '*'; MaxLength : limite le nombre de caractres quil est possible de saisir

    Exemple : textBox1.MaxLength = 3; // Limite la saisie 3 caractrestextBox1.MaxLength = 0; // Ne limite pas la saisie

    TextLength : donne la longueur du texteExemple : MessageBox.Show(textBox1.TextLength.ToString());

    AppendText : cette mthode permet ajouter du texte au texte dj prsent dans leTextBox

    Exemple : textBox1.AppendText(textBox2.Text); textBox1.AppendText("mon texte");

    sitant aussi quelques vnements lis au contrle TextBox : KeyDown: survient quand on appuie sur lA touche. KeyPress: quand la touche est enfonce. KeyUp: quand on relche la touche.

    Ils surviennent dans cet ordre.KeyPresspermet de rcuprer la touche tape dans e.KeyChar (mais pas F1, F2..)Exemple : rcuprer la touche tape

    privatevoidtextBox1_KeyPress(objectsender, KeyPressEventArgse){

    MessageBox.Show(e.KeyChar.ToString());}

  • 8/11/2019 Programmation_Evenementielle

    39/66

    Module 10 Programmation

    Evnementielle

    Page 39/66 OFPPT

    Exemple : Ne permettre de saisir que des chiffres

    privatevoidtextBox1_KeyPress(objectsender, KeyPressEventArgse){ inti=0;

    if(int.TryParse(e.KeyChar.ToString(), outi)){e.Handled = false;// Handled Obtient ou dfinit si l'vnement

    // d'exception a t gr}else{e.Handled = true;

    }

    }

    Exemple: Compter le nombre de caracrtre espaceswitch(e.KeyChar)

    {case(char)(Keys.Space):

    n += 1;break;

    ...

    }

    4. Listes deroulantes ComboBoxNous crons le formulaire suivant :

    Un composant ComboBox est une liste droulante double d'une zone de saisie : l'utilisateurpeut soit choisir un lment dans (2) soit taper du texte dans (1). Il existe trois sortes deComboBox fixes par la proprit DropDownStyle :

  • 8/11/2019 Programmation_Evenementielle

    40/66

    Module 10 Programmation

    Evnementielle

    Page 40/66 OFPPT

    Par dfaut, le type d'un ComboBox est DropDown.La classe ComboBox a un seul constructeur :

    Les lments du ComboBox sont disponibles dans la proprit Items :

    C'est une proprit indexe, Items[i] dsignant l'lment i du Combo. Elle est en lecture seule.Soit C un combo et C.Items sa liste d'lments. On a les proprits suivantes :

    On peut s'tonner qu'un combo puisse contenir des objets alors que visuellement il affiche deschanes de caractres. Si un ComboBox contient un objet obj, il affiche la chaneobj.ToString(). On se rappelle que tout objet a une mthode ToString hrite de la classeobject et qui rend une chane de caractres "reprsentative" de l'objet.

    L'lment Item slectionn dans le combo C est C.SelectedItem ou C.Items[C.SelectedIndex]o C.SelectedIndex est le n de l'lment slectionn, ce n partant de zro pour le premier

    lment. Le texte slectionn peut tre obtenu de diverses faons : C.SelectedItem.Text,C.Text.

    Lors du choix d'un lment dans la liste droulante se produit l'vnementSelectedIndexChanged qui peut tre alors utilis pour tre averti du changement de slectiondans le combo. Dans l'application suivante, nous utilisons cet vnement pour afficherl'lment qui a t slectionn dans la liste.

  • 8/11/2019 Programmation_Evenementielle

    41/66

    Module 10 Programmation

    Evnementielle

    Page 41/66 OFPPT

    Le code de l'application est le suivant :

    ligne 5 :previousSelectedIndex mmorise le dernier index slectionn dans le combo ligne 10 : remplissage du combo avec un tableau de chanes de caractres ligne 12 : le 1er lment est slectionn ligne 15 : la mthode excute chaque fois que l'utilisateur slectionne un lment du

    combo. Contrairement ce que pourrait laisser croire le nom de l'vnement, celui-ci alieu mme si l'lment slectionn est le mme que le prcdent.

    ligne 16 : on note l'index de l'lment slectionn ligne 17 : s'il est diffrent du prcdent ligne 19 : on affiche le n et le texte de l'lment slectionn ligne 21 : on note le nouvel index

  • 8/11/2019 Programmation_Evenementielle

    42/66

    Module 10 Programmation

    Evnementielle

    Page 42/66 OFPPT

    5. Composant ListBoxOn se propose de construire l'interface suivante :

    Les composants de cette fentre sont les suivants :

    Les composants ListBox ont un mode de slection de leurs lments qui est dfini par leurproprit SelectionMode :

  • 8/11/2019 Programmation_Evenementielle

    43/66

    Module 10 Programmation

    Evnementielle

    Page 43/66 OFPPT

    Fonctionnement de l'application L'utilisateur tape du texte dans le champ 1. Il l'ajoute la liste 1 avec le boutonAjouter

    (2). Le champ de saisie (1) est alors vid et l'utilisateur peut ajouter un nouvellment.

    Il peut transfrer des lments d'une liste l'autre en slectionnant l'lment transfrer dans l'une des listes et en choississant le bouton de transfert adquat 5 ou 6.L'lment transfr est ajout la fin de la liste de destination et enlev de la listesource.

    Il peut double-cliquer sur un lment de la liste 1. Cet lment est alors transfr dans

    la bote de saisie pour modification et enlev de la liste 1.Les boutons sont allums ou teints selon les rgles suivantes :

    le boutonAjouter n'est allum que s'il y a un texte non vide dans le champ de saisie le bouton [5] de transfert de la liste 1 vers la liste 2 n'est allum que s'il y a un lment

    slectionn dans la liste 1 le bouton [6] de transfert de la liste 2 vers la liste 1 n'est allum que s'il y a un lment

    slectionn dans la liste 2 les boutons [7] et [8] d'effacement des listes 1 et 2 ne sont allums que si la liste

    effacer contient des lments.

    Dans les conditions prcdentes, tous les boutons doivent tre teints lors du dmarrage del'application. C'est la proprit Enabled des boutons qu'il faut alors positionner false. On peutle faire au moment de la conception ce qui aura pour effet de gnrer le code correspondantdans la mthode InitializeComponent ou le faire nous-mmes dans le constructeur comme ci-dessous :

    L'tat du bouton Ajouter est contrl par le contenu du champ de saisie. C'est l'vnementTextChanged qui nous permet de suivre les changements de ce contenu :

    L'tat des boutons de transfert dpend du fait qu'un lment a t slectionn ou non dans laliste qu'ils contrlent :

  • 8/11/2019 Programmation_Evenementielle

    44/66

    Module 10 Programmation

    Evnementielle

    Page 44/66 OFPPT

    Le code associ au clic sur le boutonAjouter est le suivant :

    On notera la mthode Focus qui permet de mettre le "focus" sur un contrle du formulaire. Lecode associ au clic sur les boutons Effacer :

    Le code de transfert des lments slectionns d'une liste vers l'autre :

    Les deux mthodes ci-dessus dlguent le transfert des lments slectionns d'une liste l'autre une mme mthode prive appele transfert :

  • 8/11/2019 Programmation_Evenementielle

    45/66

    Module 10 Programmation

    Evnementielle

    Page 45/66 OFPPT

    Ligne b : la mthode transfert reoit six paramtres : une rfrence sur la liste contenant les lments slectionns appele ici l1. Lors de

    l'excution de l'application, l1 est soit listBox1 soit listBox2. On voit des exemplesd'appel, lignes 3 et 8 des procdures de transfert buttonXversY_Click.

    une rfrence sur le bouton de transfert li la liste l1. Par exemple si l1 est listBox2,

    ce sera button2vers1( cf appel ligne 8)

    une rfrence sur le bouton d'effacement de la liste l1. Par exemple si l1 est listBox1,ce sera buttonEffacer1( cf appel ligne 3)

    les trois autres rfrences sont analogues mais font rfrence la liste l2.

    Ligne d : la collection [ListBox].SelectedIndices reprsente les indices des lmentsslectionns dans le composant [ListBox]. C'est une collection :

    [ListBox].SelectedIndices.Count est le nombre d'lment de cette collection [ListBox].SelectedIndices[i] est l'lment n i de cette collection

    On parcourt la collection en sens inverse : on commence par la fin de la collection pourterminer par le dbut. Nous expliquerons pourquoi.

    Ligne f : indice d'un lment slectionn de la liste l1Ligne h : cet lment est ajout dans la liste l2Ligne j : et supprim de la liste l1. Parce qu'il est supprim, il n'est plus slectionn. Lacollection l1.SelectedIndices de la ligne d va tre recalcule. Elle va perdre l'lment quivient d'tre supprim. Tous les lments qui sont aprs celui-ci vont voir leur n passer de n n-1.

    si la boucle de la ligne (d) est croissante et qu'elle vient de traiter l'lment n 0, elleva ensuite traiter l'lment n 1. Or l'lment qui portait le n 1 avant la suppressionde l'lment n 0, va ensuite porter le n 0. Il sera alors oubli par la boucle.

    si la boucle de la ligne (d) est dcroissante et qu'elle vient de traiter l'lment n n, elle

    va ensuite traiter l'lment n n-1. Aprs suppression de l'lment n n, l'lment n n-1 ne change pas de n. Il est donc trait au tour de boucle suivant.

  • 8/11/2019 Programmation_Evenementielle

    46/66

    Module 10 Programmation

    Evnementielle

    Page 46/66 OFPPT

    Lignes m-n : l'tat des boutons [Effacer] dpend de la prsence ou non d'lments dans les

    listes associesLigne p : la liste l2 n'a plus d'lments slectionns : on teint son bouton de transfert.

    6. Cases a cocher CheckBox, boutons radio ButtonRadio

    Les composants de la fentre sont les suivants :

    L'vnement qui nous intresse pour ces six contrles est l'vnement CheckChanged

    indiquant que l'tat de la case cocher ou du bouton radio a chang. Cet tat est reprsentdans les deux cas par la proprit boolenne Checked qui vrai signifie que le contrle estcoch. Nous n'utiliserons ici qu'une seule mthode pour traiter les six vnementsCheckChanged, la mthode affiche.Pour faire en sorte que les six vnements CheckChanged soient grs par la mme mthodeaffiche, on pourra procder comme suit :

    Slectionnons le composant radioButton1 et cliquons droit dessus pour avoir accs sesproprits :

  • 8/11/2019 Programmation_Evenementielle

    47/66

    Module 10 Programmation

    Evnementielle

    Page 47/66 OFPPT

    Dans l'onglet vnements [1], on associe la mthode affiche [2] l'vnement CheckChanged.Cela signifie que l'on souhaite que le clic sur l'option A1 soit traite par une mthode appeleaffiche. Visual studio gnre automatiquement la mthode affiche dans la fentre de code :

    La mthode affiche est une mthode de type EventHandler.

    Pour les cinq autres composants, on procde de mme. Slectionnons par exemple l'optionCheckBox1 et ses vnements [3]. En face de l'vnement Click, on a une liste droulante [4]dans laquelle sont prsentes les mthodes existantes pouvant traiter cet vnement. Ici on n'aque la mthode affiche. On la slectionne. On rpte ce processus pour tous les autrescomposants.

    Dans la mthode InitializeComponent du code a t gnr. La mthode affiche a t dclarecomme gestionnaire des six vnements CheckedChanged de la faon suivante :

    La mthode affiche est complte comme suit :

  • 8/11/2019 Programmation_Evenementielle

    48/66

    Module 10 Programmation

    Evnementielle

    Page 48/66 OFPPT

    La syntaxe

    Permet de vrifier que l'objet sender est de type CheckBox. Cela nous permet ensuite de faireun transtypage vers le type exact de sender. La mthode affiche crit dans la listelistBoxValeurs le nom du composant l'origine de l'vnement et la valeur de sa propritChecked. A l'excution [7], on voit qu'un clic sur un bouton radio provoque deux vnementsCheckChanged : l'un sur l'ancien bouton coch qui passe "non coch" et l'autre sur lenouveau bouton qui passe "coch".

    7. Variateurs ScrollBarIl existe plusieurs types de variateur : le variateur horizontal (HScrollBar), le variateur vertical(VScrollBar), l'incrmenteur (NumericUpDown).

    Ralisons l'application suivante :

  • 8/11/2019 Programmation_Evenementielle

    49/66

    Module 10 Programmation

    Evnementielle

    Page 49/66 OFPPT

    Un variateur ScrollBar permet l'utilisateur de choisir une valeur dans une plage devaleurs entires symbolise par la "bande" du variateur sur laquelle se dplace uncurseur. La valeur du variateur est disponible dans sa proprit Value.

    Pour un variateur horizontal, l'extrmit gauche reprsente la valeur minimale de la

    plage, l'extrmit droite la valeur maximale, le curseur la valeur actuelle choisie. Pourun variateur vertical, le minimum est reprsent par l'extrmit haute, le maximum parl'extrmit basse. Ces valeurs sont reprsentes par les proprits Minimum etMaximum et valent par dfaut 0 et 100.

    Un clic sur les extrmits du variateur fait varier la valeur d'un incrment (positif oungatif) selon l'extrmit clique appele SmallChange qui vaut par dfaut 1.

    Un clic de part et d'autre du curseur fait varier la valeur d'un incrment (positif oungatif) selon l'extrmit clique appele LargeChange qui vaut par dfaut 10.

    Lorsqu'on clique sur l'extrmit suprieure d'un variateur vertical, sa valeur diminue.Cela peut surprendre l'utilisateur moyen qui s'attend normalement voir la valeur"monter". On rgle ce problme en donnant une valeur ngative aux propritsSmallChange et LargeChange

    Ces cinq proprits (Value, Minimum, Maximum, SmallChange, LargeChange)sont accessibles en lecture et criture. L'vnement principal du variateur est celui qui signale un changement de valeur :

    l'vnement Scroll.

    Un composant NumericUpDown est proche du variateur : il a lui aussi les propritsMinimum, Maximum et Value, par dfaut 0, 100, 0. Mais ici, la proprit Value est affichedans une bote de saisie faisant partie intgrante du contrle. L'utilisateur peut lui mmemodifier cette valeur sauf si on a mis la proprit ReadOnly du contrle vrai. La valeur del'incrment est fixe par la proprit Increment, par dfaut 1. L'vnement principal ducomposant NumericUpDown est celui qui signale un changement de valeur : l'vnementValueChangedLe code de l'application est le suivant :

  • 8/11/2019 Programmation_Evenementielle

    50/66

    Module 10 Programmation

    Evnementielle

    Page 50/66 OFPPT

    8. vnements sourisLorsqu'on dessine dans un conteneur, il est important de connatre la position de la sourispour, par exemple, afficher un point lors d'un clic. Les dplacements de la souris provoquentdes vnements dans le conteneur dans lequel elle se dplace.

    [1] : les vnements survenant lors d'un dplacement de la souris sur le formulaire ou sur uncontrle[2] : les vnements survenant lors d'un glisser / lcher (Drag'nDrop)

  • 8/11/2019 Programmation_Evenementielle

    51/66

    Module 10 Programmation

    Evnementielle

    Page 51/66 OFPPT

    Voici une application permettant de mieux apprhender quels moments se produisent lesdiffrents vnements souris :

    Pour suivre les dplacements de la souris sur les trois contrles, on n'crit qu'un seulgestionnaire, le gestionnaire affiche :

  • 8/11/2019 Programmation_Evenementielle

    52/66

    Module 10 Programmation

    Evnementielle

    Page 52/66 OFPPT

    Le code de la procdure affiche est le suivant :

    A chaque fois que la souris entre dans le domaine d'un contrle son systme de coordonneschange. Son origine (0,0) est le coin suprieur gauche du contrle sur lequel elle se trouve.Ainsi l'excution, lorsqu'on passe la souris du formulaire au bouton, on voit clairement lechangement de coordonnes. Afin de mieux voir ces changements de domaine de la souris, onpeut utiliser la proprit Cursor [1] des contrles :

    Cette proprit permet de fixer la forme du curseur de souris lorsque celle-ci entre dans ledomaine du contrle. Ainsi dans notre exemple, nous avons fix le curseur Default pour leformulaire lui-mme [2], Hand pour la liste 2 [3] et Cross pour le bouton 3 [4].Par ailleurs, pour dtecter les entres et sorties de la souris sur la liste 2, nous traitons lesvnements MouseEnter et MouseLeave de cette mme liste :

    Pour traiter les clics sur le formulaire, nous traitons les vnements MouseDown et MouseUp :

  • 8/11/2019 Programmation_Evenementielle

    53/66

    Module 10 Programmation

    Evnementielle

    Page 53/66 OFPPT

    Lignes 3 et 8 : les messages sont placs en 1re position dans le ListBox afin que lesvnements les plus rcents soient les premiers dans la liste.

    Enfin, le code du gestionnaire de clic sur le bouton Effacer :

    9. Crer une fentre avec menuVoyons maintenant comment crer une fentre avec menu. Nous allons crer la fentresuivante :

    Pour crer un menu, on choisit le composant "MenuStrip" dans la barre "Menus & Tollbars" :

  • 8/11/2019 Programmation_Evenementielle

    54/66

    Module 10 Programmation

    Evnementielle

    Page 54/66 OFPPT

    [1] : choix du composant [MenuStrip][2] : on a alors un menu qui s'installe sur le formulaire avec des cases vides intitules "TypeHere". Il suffit d'y indiquer les diffrentes options du menu.[3] : le libell "Options A" a t tap. On passe au libell [4].[5] : les libells des options A ont t saisis. On passe au libell [6]

    [6] : les premires options B[7] : sous B1, on met un sparateur. Celui-ci est disponible dans un combo associ au texte"Type Here"[8] : pour faire un sous-menu, utiliser la flche [8] et taper le sous-menu dans [9]

    Il reste nommer les diffrents composants du formulaire :

  • 8/11/2019 Programmation_Evenementielle

    55/66

    Module 10 Programmation

    Evnementielle

    Page 55/66 OFPPT

    Les options de menu sont des contrles comme les autres composants visuels et ont desproprits et vnements. Par exemple les proprits de l'option de menu A1 sont lessuivantes :

    Deux proprits sont utilises dans notre exemple :

    Dans la structure du menu, slectionnons l'optionA1 et cliquons droit pour avoir accs aux

    proprits du contrle :

  • 8/11/2019 Programmation_Evenementielle

    56/66

    Module 10 Programmation

    Evnementielle

    Page 56/66 OFPPT

    Dans l'onglet vnements [1], on associe la mthode affiche [2] l'vnement Click. Cela

    signifie que l'on souhaite que le clic sur l'option A1 soit traite par une mthode appeleaffiche. Visual studio gnre automatiquement la mthode affiche dans la fentre de code :

    Dans cette mthode, nous nous contenterons d'afficher dans le label labelStatut la propritText de l'option de menu qui a t clique :

    La source de l'vnement sender est de type object. Les options de menu sont elle de typeToolStripMenuItem, aussi est-on oblig de faire un transtypage de object versToolStripMenuItem.

    Pour toutes les options de menu, on fixe le gestionnaire du clic la mthode affiche [3,4].Excutons l'application et slectionnons un lment de menu :

    10. Composants non visuelsNous nous intressons maintenant un certain nombre de composants non visuels : on lesutilise lors de la conception mais on ne les voit pas lors de l'excution.

    a) Boites de dialogue OpenFileDialog et SaveFileDialog

    Nous allons construire l'application suivante :

  • 8/11/2019 Programmation_Evenementielle

    57/66

    Module 10 Programmation

    Evnementielle

    Page 57/66 OFPPT

    Les contrles sont les suivants :

    Le code associ au bouton Effacer est simple :

    Nous utiliserons les proprits et mthodes suivantes de la classe SaveFileDialog :

    La mthode ShowDialog affiche une bote de dialogue analogue la suivante :

  • 8/11/2019 Programmation_Evenementielle

    58/66

    Module 10 Programmation

    Evnementielle

    Page 58/66 OFPPT

    La procdure de sauvegarde peut s'crire ainsi :

  • 8/11/2019 Programmation_Evenementielle

    59/66

    Module 10 Programmation

    Evnementielle

    Page 59/66 OFPPT

    ligne 4 : on fixe le dossier initial (InitialDirectory) au dossier

    (Application.ExecutablePath) qui contient l'excutable de l'application. ligne 5 : on fixe les types de fichiers prsenter. On notera la syntaxe des filtres :

    filtre1|filtre2|..|filtren avec filtrei= Texte| modle de fichier. Ici l'utilisateur aura lechoix entre les fichiers *.txt et *.*.

    ligne 6 : on fixe le type de fichier prsenter en premier l'utilisateur. Ici l'index 0

    dsigne les fichiers *.txt. ligne 8 : la bote de dialogue est affiche et son rsultat rcupr. Pendant que la bote

    de dialogue est affiche, l'utilisateur n'a plus accs au formulaire principal (bote dedialogue dite modale). L'utilisateur fixe le nom du fichier sauvegarder et quitte labote soit par le bouton Enregistrer, soit par le boutonAnnuler, soit en fermant la bote.Le rsultat de la mthode ShowDialog est DialogResult.OK uniquement si l'utilisateur a

    utilis le bouton Enregistrer pour quitter la bote de dialogue. Ceci fait, le nom du fichier crer est maintenant dans la proprit FileName de l'objet

    saveFileDialog1. On est alors ramen la cration classique d'un fichier texte. On ycrit le contenu du TextBox : textBoxLignes.Text tout en grant les exceptions quipeuvent se produire.

    La classe OpenFileDialog est trs proche de la classe SaveFileDialog. On utilisera les mmesmthodes et proprits que prcdemment. La mthode ShowDialog affiche une bote dedialogue analogue la suivante :

    La procdure de chargement du fichier texte peut s'crire ainsi :

  • 8/11/2019 Programmation_Evenementielle

    60/66

    Module 10 Programmation

    Evnementielle

    Page 60/66 OFPPT

    ligne 4 : on fixe le dossier initial (InitialDirectory) au dossier(Application.ExecutablePath) qui contient l'excutable de l'application.

    ligne 5 : on fixe les types de fichiers prsenter. On notera la syntaxe des filtres :filtre1|filtre2|..|filtren avec filtrei= Texte| modle de fichier. Ici l'utilisateur aura le

    choix entre les fichiers *.txt et *.*. ligne 6 : on fixe le type de fichier prsenter en premier l'utilisateur. Ici l'index 0

    dsigne les fichiers *.txt. ligne 8 : la bote de dialogue est affiche et son rsultat rcupr. Pendant que la bote

    de dialogue est affiche, l'utilisateur n'a plus accs au formulaire principal (bote dedialogue dite modale). L'utilisateur fixe le nom du fichier sauvegarder et quitte labote soit par le bouton Ouvrir, soit par le boutonAnnuler, soit en fermant la bote. Lersultat de la mthode ShowDialog est DialogResult.OK uniquement si l'utilisateur autilis le bouton Enregistrer pour quitter la bote de dialogue.

    Ceci fait, le nom du fichier crer est maintenant dans la proprit FileName de l'objet

    openFileDialog1. On est alors ramen la lecture classique d'un fichier texte. Onnotera, ligne 16, la mthode qui permet de lire la totalit d'un fichier.

    b) Boites de dialogue FontColor et ColorDialog

    Nous continuons l'exemple prcdent en y ajoutant deux nouveaux boutons et deux nouveauxcontrles non visuels :

  • 8/11/2019 Programmation_Evenementielle

    61/66

    Module 10 Programmation

    Evnementielle

    Page 61/66 OFPPT

    Les classes FontDialog et ColorDialog ont une mthode ShowDialog analogue la mthodeShowDialog des classes OpenFileDialog et SaveFileDialog.

    La mthode ShowDialog de la classe ColorDialog permet de choisir une couleur [1]. Celle de laclasse FontDialog permet de choisir une police de caractres [2] :

    [1] : si l'utilisateur quitte la bote de dialogue avec le bouton OK, le rsultat de la mthodeShowDialog est DialogResult.OK et la couleur choisie est dans la proprit Color de l'objetColorDialog utilis.[2] : si l'utilisateur quitte la bote de dialogue avec le bouton OK, le rsultat de la mthodeShowDialog est DialogResult.OK et la police choisie est dans la proprit Font de l'objetFontDialog utilis.

    Nous avons dsormais les lments pour traiter les clics sur les boutons Couleur et Police :

  • 8/11/2019 Programmation_Evenementielle

    62/66

  • 8/11/2019 Programmation_Evenementielle

    63/66

    Module 10 Programmation

    Evnementielle

    Page 63/66 OFPPT

    Les proprits du composant Timer utilises ici seront les suivantes :

    Dans notre exemple le timer s'appelle timer1 et timer1.Interval est mis 1000 ms (1s).L'vnement Tick se produira donc toutes les secondes. Le clic sur le bouton Arrt/Marche esttrait par la procdure buttonArretMarche_Click suivante :

  • 8/11/2019 Programmation_Evenementielle

    64/66

    Module 10 Programmation

    Evnementielle

    Page 64/66 OFPPT

    ligne 13 : la procdure qui traite le clic sur le bouton Arrt/Marche. ligne 15 : le libell du bouton Arrt/Marche est soit "Arrt" soit "Marche". On est donc

    oblig de faire un test sur ce libell pour savoir quoi faire. ligne 17 : dans le cas de "Marche", on note l'heure de dbut dans une variable dbut

    qui est une variable globale (ligne 11) de l'objet formulaire ligne 19 : initialise le contenu du label LabelChrono ligne 21 : le timer est lanc (Enabled=true) ligne 23 : libell du bouton passe "Arrt".

    ligne 27 : dans le cas de "Arrt" ligne 29 : on arrte le timer (Enabled=false)

    ligne 31 : on passe le libell du bouton "Marche".Il nous reste traiter l'vnement Tick sur l'objet timer1, vnement qui se produit toutes lessecondes :

  • 8/11/2019 Programmation_Evenementielle

    65/66

    Module 10 Programmation

    Evnementielle

    Page 65/66 OFPPT

    ligne 3 : on note l'heure du moment ligne 4 : on calcule le temps coul depuis l'heure de lancement du chronomtre. On

    obtient un objet de type TimeSpan qui reprsente une dure dans le temps. ligne 6 : celle-ci doit tre affiche dans le chronomtre sous la forme hh:mm:ss. Pour

    cela nous utilisons les proprits Hours, Minutes, Seconds de l'objet TimeSPan quireprsentent respectivement les heures, minutes, secondes de la dure que nousaffichons au format ToString("d2") pour avoir un affichage sur 2 chiffres.

    12. Regroupement de contrlesOn peut regrouper des contrles dans :

    Les GroupBox. Les Panels. Les PictureBox.

    Les TabControl.

    a) GroupBox et Panel

    Il est possible de regrouper des contrles dans un container, on peut par exemple regrouperplusieurs RadioButton. Le container peut tre un GroupBox ou un Panel.

    Pour l'utilisateur, le fait que toutes les options soient regroupes dans un panneau est unindice visuel logique (Tous les RadioButton permettrons un choix dans une mme catgorie dedonnes). Au moment de la conception, tous les contrles peuvent tre dplacs facilement ;si vous dplacez le contrle GroupBox ou Panel, tous les contrles qu'il contient sontgalement dplacs.

    b) PictureBox

    Le contrle PictureBox peut afficher une image mais peu aussi servir de conteneur d'autrescontrles. Retenons la notion de conteneur qui est le contrle parent.

    c) TabControlCe contrle permet de crer des onglets comme dans un classeur, onglets entirement grspar C#. Chaque page peut contenir d'autres contrles. En mode conception, en passant par laproprit TabPages, on ajoute des onglets dont la proprit Text contient le texte afficher enhaut (Ici: Page 1..). il suffit ensuite de cliquer sur chaque onglet et d'y ajouter les contrles.

  • 8/11/2019 Programmation_Evenementielle

    66/66

    Module 10 Programmation

    Evnementielle