Académique Documents
Professionnel Documents
Culture Documents
DRPS/ISGI LAYOUNE
Page 1/66
OFPPT
I. II.
A.
1. 2.
a) b)
IV.
A. B.
1. 2.
a)
C.
1.
a) b)
V. VI.
A.
1. 2. 3. 4. 5.
B.
1. 2.
2.
a) b) c) d) e) f) g) h) i) j) k) l) m)
3. 4. 5. 6. 7. 8. 9. 10.
a) b)
Etiquettes Label et boites de saisie TextBox ....................................... Listes deroulantes ComboBox ........................................................... Composant ListBox ......................................................................... Cases a cocher CheckBox, boutons radio ButtonRadio ......................... Variateurs ScrollBar ........................................................................ vnements souris.......................................................................... Crer une fentre avec menu ........................................................... Composants non visuels ...............................................................
35 39 42 46 48 50 53 56
Boites de dialogue OpenFileDialog et SaveFileDialog ................................... 56 Boites de dialogue FontColor et ColorDialog ............................................... 60
11. 12.
a) b) c)
Page 3/66
OFPPT
Page 4/66
OFPPT
I. Introduction
Lobjectif de ce module est de prsenter les concepts fondamentaux de la programmation vnementielle ainsi que les lments ncessaires une bonne prise en main de la plate forme de dveloppement Microsoft .Net ainsi que des environnements classiques qui y sont ddis.
2. Interface graphique
Les produits de la gamme Visual Studio partagent le mme environnement de dveloppement intgr (IDE). L'IDE est compos de plusieurs lments : la barre d'outils Menu, la barre d'outils Standard, diffrentes fentres Outil ancres ou masques automatiquement sur les bords gauche, infrieur et droit, ainsi que l'espace d'diteur. Les fentres Outil, menus et barres d'outils disponibles varient en fonction du type de projet ou de fichier dans lequel vous travaillez. Lorsqu'on va la programmer via Visual Studio, une application va donc toujours pouvoir tre aborde 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
Page 5/66
OFPPT
Le code proprement dit, o nous allons entrer les diffrentes procdures en rapport avec le formulaire en question :
Page 6/66
OFPPT
b) L'diteur de code
Passons au code. Visual Studio, dans sa grande magnanimit, va tcher de faire au mieux pour nous faciliter la vie. Il va en fait dcrypter notre code au fur et mesure de sa rdaction, et nous donner en temps rel des indications via des codes de couleur, comme on peut le voir sur l'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 au compilateur, sera immdiatement souligne.
Page 7/66
OFPPT
III.
Outils de dbogage
Les erreurs de syntaxe Les erreurs dexcution Les erreurs de logique
Cette section prsente les outils de dbogage offerts par la plate forme, nous ferons les illustrations partir de Visual Studio 2008. En programmation on rencontre trois types derreurs qui sont :
Dans ces cas C# souligne en ondul rouge le code. Il faut mettre le curseur sur le mot soulign, 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":
Page 8/66
OFPPT
Si vous tapez 'oui' C# excute la dernire version qui a t gnre correctement, mais PAS de code source actuel qui contient des erreurs!!
Page 9/66
OFPPT
1. Erreur de conception :
Exemples : Ouvrir un fichier qui n'existe pas (On aurait du vrifier qu'il existe avant de l'ouvrir!). Utiliser un index d'lment de tableau suprieur au nombre d'lment. Envoyer un mauvais paramtre une fonction.
2. Erreurs de lutilisateur :
Exemples : On lui demande de taper un chiffre, il tape une lettre ou rien puis valide.
Il faut toujours vrifier ce que fait l'utilisateur et prvoir toutes les possibilits. Si je demande l'utilisateur de tapez un nombre entre 1 et 10, il faut: Vrifier qu'il a tap quelque chose. Que c'est bien un chiffre (pas des lettres). Que le chiffre est bien entre 1 et 10. Sinon il faudra reposer la question.
Page 10/66
OFPPT
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'arrte dfinitivement 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).
Page 11/66
OFPPT
IV.
Consulter laide
La plupart des interfaces de dveloppement .Net offre un certain nombre ditem daide communs, pour cela utiliser le menu ? :
Page 12/66
OFPPT
V.
La 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 (Dynamic Link Library) sont gnres et places dans un dossier situ la racine du projet et qui porte le nom de Bin, dpendamment de loption de compilation choisi lexcutable sera plus spcifiquement dploy dans un sous dossier du dossier BIN intitul Debug ou Release.
Page 13/66
OFPPT
VI.
3. Multi-fentrage
Windows est une interface graphique multi-fentres. Cest dire que lcran est fractionn en plusieurs parties o sexcutent les applications. Ces fentres peuvent se chevaucher, se recouvrir mutuellement ou tre disposes cte cte permettant ainsi de partager lesp ace de travail. 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 lutilisateur puisse 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
Page 14/66
OFPPT
4. Les icnes
Les objets sont reprsents par des icnes (petits dessins) plutt que par des libells. Lusage de ces icnes permet de rapprocher lenvironnement de travail de lenvironnement rel de lutilisateur. Ces icnes vont permettre de transmettre un message lutilisateur par lintermdiaire dune mtaphore. Par exemple licne symbolisant une imprimante indique sans ambigut une fonction dimpression.
5. Les menus
Lutilisation de menus permet de proposer un processus bas sur lassociation objet/action. On slectionne un objet, puis on dsigne laction que lon souhaite associer cet objet dans un menu. Lavantage essentiel de ce processus rside dans la possibilit de combiner plusieurs actions sans avoir redfinir lobjet. Ce processus est le mode dinteraction avec linterfa ce et se divise en trois phases : Dsignation de lobjet ; Choix de laction raliser ; Production du rsultat.
2. MDI
Le MDI (Multiple Document Interface) autorise louverture de plusieurs documents lintrieur dune mme application. Il dfinit le comportement des fentres documents lintrieur dune fentre mre ou fentre de lapplication. Les meilleurs exemples de lutilisation de fentres MDI se trouvent dans les outils bureautiques Word et Excel. Lintrt du principe MDI est suffisamment manifeste pour lutiliser galement dans des applications de gestion. Il se justifie alors 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 stockant temporairement sur le poste client les donnes.
Page 15/66
OFPPT
A. Un premier projet
Construisons un premier projet de type "Application windows" :
: : : :
crer un nouveau projet de type Application Windows le nom du projet importe peu pour le moment le projet cr
Page 16/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 des sous-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 les composants 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. On peut la dplacer, la redimensionner et la fermer. On a donc les lments de base d'une fentre graphique. La classe principale [Program.cs] est la suivante :
Page 17/66
OFPPT
ligne 2 : les applications avec formulaires utilisent l'espace de noms System.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 les applications 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.
ligne 5 : la classe Form1 drive de la classe [System.Windows.Forms.Form] qui est la classe mre de toutes les fentres. Le mot cl partial indique que la classe est partielle et qu'elle peut tre complte par d'autres fichiers source. C'est le cas ici, o la classe Form1 est rpartie dans deux fichiers : [Form1.cs] : dans lequel on trouvera le comportement du formulaire, notamment ses gestionnaires d'vnements [Form1.Designer.cs] : dans lequel on trouvera les composants du formulaire et leurs proprits. Ce fichier a la particularit d'tre rgnr chaque fois que l'utilisateur modifie la fentre en mode [conception]. lignes 6-8 : le constructeur de la classe Form1
Page 18/66
OFPPT
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 pas ajouter 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# des choix que le dveloppeur fait en mode [conception]. Prenons un premier exemple :
Page 19/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 que dans le code source [Form1.Designer.cs] :
B. Exemple pratique
Nous commenons un nouveau projet appel 02. Pour cela nous suivons la procdure explicite prcdemment pour crer un projet. La fentre crer est la suivante :
Page 20/66
OFPPT
[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 :
Page 21/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 la barre 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 ct gauche ou droit, le milieu. les options Make Same Size permettent que des composants aient la mme hauteur ou la 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 aligner verticalement.
Page 22/66
OFPPT
Une fois placs les composants nous fixons leurs proprits. Pour cela, cliquer droit sur le composant et prendre l'option Properties :
[1] : slectionner le composant pour avoir sa fentre de proprits. Dans celle-ci, modifier les proprits 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] :
Page 23/66
OFPPT
lignes 53-55 : les trois composants ont donn naissance trois champs privs de la classe [Form1]. On notera que les noms de ces champs sont les noms donns aux composants 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 sans utiliser le mode [conception]. De nombreux exemples de ceci sont donns dans la documentation MSDN de Visual Studio. Matriser ce code permet de crer des formulaires en cours d'excution : par exemple, crer la vole un formulaire permettant la mise jour d'une table de base de donnes, la structure de cette table n'tant dcouverte qu' l'excution.
Page 24/66
OFPPT
[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 ordre alphabtique : [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 clic sur un bouton correspond l'vnement Click. [2] : la colonne de droite contient le nom de la procdure appele lorsque l'vnement correspondant se produit. [3] : si on double-clique sur la cellule de l'vnement Click, on passe alors automatiquement dans la fentre de code pour crire le gestionnaire de l'vnement Click sur le bouton buttonAfficher :
Page 25/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 suite d'un clic sur le bouton buttonAfficher, sender sera gal buttonAfficher. On peut imaginer que la procdure buttonAfficher_Click soit excute partir d'une autre procdure. Celle-ci aurait alors tout loisir de mettre comme premier paramtre, l'objet senderde son choix. EventArgs : un objet qui contient des informations sur l'vnement. Pour un vnement Click, 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 textBoxSaisie s'il est non vide [1], un message d'erreur sinon [2] :
Page 26/66
OFPPT
La classe MessageBox sert afficher des messages dans une fentre. Nous avons utilis ici la mthode Show suivante :
Avec :
Le paramtre buttons peut prendre ses valeurs parmi les constantes suivantes (prfixes par MessageBoxButtons comme montr ligne 7) ci-dessus :
Page 27/66
OFPPT
Page 28/66
OFPPT
Le paramtre icon peut prendre ses valeurs parmi les constantes suivantes (prfixes par MessageBoxIcon comme montr ligne 7) ci-dessus :
Page 29/66
OFPPT
La mthode Show est une mthode statique qui rend [System.Windows.Forms.DialogResult] qui est une numration :
un
rsultat
de
type
Pour savoir sur quel bouton a appuy l'utilisateur pour fermer la fentre de type MessageBox on crira :
a) Name
Il sagit du nom de lobjet tel quil est gr par lapplication. Par dfaut, C# baptise tous les objets 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 de crer afin de donner des noms plus vocateurs. Le bouton sur lequel est crit OK sera nomm BoutonOK. La liste qui affiche les utilisateurs sera nomme ListUtilisateurs. Il est conseill de dbuter le nom de lobjet par un mot voquant sa nature: BoutonOk ou BtOk ou ButtonOk, btnOk cest comme vous voulez. Microsoft conseille: Btn : pour les Boutons
Page 30/66
OFPPT
b) Text
Il sagit du texte qui est associ lobjet. Dans le cas dune fentre cest le texte qui apparat dans la barre de titre en haut. Pour un TextBox ou un Label cest videment le texte qui est affich. On peut modifier cette proprit en mode conception ou dans le code Exemple : Avec du code comment faire pour que le bouton ButtonOk porte linscription Ok ButtonOk.Text = "OK";
c) Enabled
Accessible, Indique si un contrle peut rpondre une interaction utilisateur. La proprit Enabled permet l'activation ou la dsactivation des contrles au moment de l'excution. Exemple : dsactiver le ButtonOk ButtonOk.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 = new Font("Arial", 14);
f) BackColor ForeColor
Couleur du fond, Couleur de lavant plan Pour un bouton Forecolor co rrespond au cadre et aux caractres. Exemple : ButtonOk.BackColor = Color.Blue; ButtonOk.ForeColor = Color.White;
Page 31/66
OFPPT
a) Name
Nom du formulaire. Donner un nom explicite. FrmDemarrage Ds quune fentre est cre on modifie immdiatement ses proprits en mode conception pour lui donner laspect que lon dsire.
b) Text
Cest 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 barre de titre, tout en haut gauche. Si la Form est la Form par dfaut du projet, cest galement cette icne qui Symbolisera votre application dans Windows.
d) WindowState
Donne ltat de la fentre : Plein cran : FormWindowState.Maximized Normale : FormWindowState.Normal Dans la barre de tache : FormWindowState.Minimized Exemple : mettre une fentre en plein cran avec du code this.WindowState = FormWindowState.Maximized ;
e) ControlBox
Si cette proprit comme valeur False, les boutons de contrle situs droite de la barre de la fentre napparaissent pas.
f) MaximizeBox
Si cette proprit comme valeur False, le boutons de contrle Plein cran situs droite de la barre de la fentre napparat pas.
g) MinimizeBox
Si cette proprit comme valeur False, le boutons de contrle Minimize situs droite de la barre 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 la modification de la taille de la fentre (Sizable). Exemple :
Page 32/66
OFPPT
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 : Form f1 = new Form(); 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 0 il est transparent, pour 1 il est totalement opaque (normal) Exemple : this.Opacity = 0.75;
m) Les vnements
Nous nous attardons ici sur quelques vnements importants d'un formulaire.
Page 33/66
OFPPT
[1] : le formulaire [2] : les trois vnements traits Le code de [Form1.cs] est le suivant :
Page 34/66
OFPPT
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 e que la mthode a reu en paramtre. Si nous mettons cette proprit False, la fermeture de la fentre est abandonne, sinon elle se poursuit L'vnement FormClosed va alors se produire :
Page 35/66
OFPPT
Page 36/66
OFPPT
Pour qu'un TextBox devienne multilignes on positionne les proprits suivantes du contrle :
Page 37/66
OFPPT
ligne 18 : lorsque le formulaire est affich (vt Shown), on met le focus sur le champ de saisie 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 caractres textBox1.MaxLength = 0; // Ne limite pas la saisie TextLength : donne la longueur du texte Exemple : MessageBox.Show(textBox1.TextLength.ToString()); AppendText : cette mthode permet ajouter du texte au texte dj prsent dans le TextBox 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. KeyPress permet de rcuprer la touche tape dans e.KeyChar (mais pas F1, F2..) Exemple : rcuprer la touche tape private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { MessageBox.Show(e.KeyChar.ToString()); }
Page 38/66
OFPPT
Exemple : Ne permettre de saisir que des chiffres private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { int i=0; if (int.TryParse(e.KeyChar.ToString(), out i)) { 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 espace switch (e.KeyChar) { case (char)(Keys.Space): n += 1; break; ... }
Un composant ComboBox est une liste droulante double d'une zone de saisie : l'utilisateur peut soit choisir un lment dans (2) soit taper du texte dans (1). Il existe trois sortes de ComboBox fixes par la proprit DropDownStyle :
Page 39/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 des chanes de caractres. Si un ComboBox contient un objet obj, il affiche la chane obj.ToString(). On se rappelle que tout objet a une mthode ToString hrite de la classe object 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'vnement SelectedIndexChanged qui peut tre alors utilis pour tre averti du changement de slection dans le combo. Dans l'application suivante, nous utilisons cet vnement pour afficher l'lment qui a t slectionn dans la liste.
Page 40/66
OFPPT
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 a lieu 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
Page 41/66
OFPPT
Les composants ListBox ont un mode de slection de leurs lments qui est dfini par leur proprit SelectionMode :
Page 42/66
OFPPT
L'tat du bouton Ajouter est contrl par le contenu du champ de saisie. C'est l'vnement TextChanged 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 la liste qu'ils contrlent :
Page 43/66
OFPPT
On notera la mthode Focus qui permet de mettre le "focus" sur un contrle du formulaire. Le code associ au clic sur les boutons Effacer :
Les deux mthodes ci-dessus dlguent le transfert des lments slectionns d'une liste l'autre une mme mthode prive appele transfert :
Page 44/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 exemples d'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 lments slectionns 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 pour terminer par le dbut. Nous expliquerons pourquoi. Ligne f : indice d'un lment slectionn de la liste l1 Ligne h : cet lment est ajout dans la liste l2 Ligne j : et supprim de la liste l1. Parce qu'il est supprim, il n'est plus slectionn. La collection l1.SelectedIndices de la ligne d va tre recalcule. Elle va perdre l'lment qui vient 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, elle va ensuite traiter l'lment n 1. Or l'lment qui portait le n 1 avant la suppression de 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 n1 ne change pas de n. Il est donc trait au tour de boucle suivant.
Page 45/66
OFPPT
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 reprsent dans les deux cas par la proprit boolenne Checked qui vrai signifie que le contrle est coch. Nous n'utiliserons ici qu'une seule mthode pour traiter les six vnements CheckChanged, la mthode affiche. Pour faire en sorte que les six vnements CheckChanged soient grs par la mme mthode affiche, on pourra procder comme suit : Slectionnons le composant radioButton1 et cliquons droit dessus pour avoir accs ses proprits :
Page 46/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 appele affiche. 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'option CheckBox1 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'a que la mthode affiche. On la slectionne. On rpte ce processus pour tous les autres composants. Dans la mthode InitializeComponent du code a t gnr. La mthode affiche a t dclare comme gestionnaire des six vnements CheckedChanged de la faon suivante :
Page 47/66
OFPPT
La syntaxe
Permet de vrifier que l'objet sender est de type CheckBox. Cela nous permet ensuite de faire un transtypage vers le type exact de sender. La mthode affiche crit dans la liste listBoxValeurs le nom du composant l'origine de l'vnement et la valeur de sa proprit Checked. A l'excution [7], on voit qu'un clic sur un bouton radio provoque deux vnements CheckChanged : l'un sur l'ancien bouton coch qui passe "non coch" et l'autre sur le nouveau bouton qui passe "coch".
7. Variateurs ScrollBar
Il existe plusieurs types de variateur : le variateur horizontal (HScrollBar), le variateur vertical (VScrollBar), l'incrmenteur (NumericUpDown).
Page 48/66
OFPPT
Un variateur ScrollBar permet l'utilisateur de choisir une valeur dans une plage de valeurs entires symbolise par la "bande" du variateur sur laquelle se dplace un curseur. 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. Pour un variateur vertical, le minimum est reprsent par l'extrmit haute, le maximum par l'extrmit basse. Ces valeurs sont reprsentes par les proprits Minimum et Maximum et valent par dfaut 0 et 100. Un clic sur les extrmits du variateur fait varier la valeur d'un incrment (positif ou ngatif) 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 ou ngatif) 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 proprits SmallChange 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 proprits Minimum, Maximum et Value, par dfaut 0, 100, 0. Mais ici, la proprit Value est affiche dans une bote de saisie faisant partie intgrante du contrle. L'utilisateur peut lui mme modifier cette valeur sauf si on a mis la proprit ReadOnly du contrle vrai. La valeur de l'incrment est fixe par la proprit Increment, par dfaut 1. L'vnement principal du composant NumericUpDown est celui qui signale un changement de valeur : l'vnement ValueChanged Le code de l'application est le suivant :
Page 49/66
OFPPT
8. vnements souris
Lorsqu'on dessine dans un conteneur, il est important de connatre la position de la souris pour, par exemple, afficher un point lors d'un clic. Les dplacements de la souris provoquent des 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 un contrle [2] : les vnements survenant lors d'un glisser / lcher (Drag'nDrop)
Page 50/66
OFPPT
Voici une application permettant de mieux apprhender quels moments se produisent les diffrents vnements souris :
Pour suivre les dplacements de la souris sur les trois contrles, on n'crit qu'un seul gestionnaire, le gestionnaire affiche :
Page 51/66
OFPPT
A chaque fois que la souris entre dans le domaine d'un contrle son systme de coordonnes change. 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 le changement de coordonnes. Afin de mieux voir ces changements de domaine de la souris, on peut utiliser la proprit Cursor [1] des contrles :
Cette proprit permet de fixer la forme du curseur de souris lorsque celle-ci entre dans le domaine du contrle. Ainsi dans notre exemple, nous avons fix le curseur Default pour le formulaire 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 les vnements MouseEnter et MouseLeave de cette mme liste :
Pour traiter les clics sur le formulaire, nous traitons les vnements MouseDown et MouseUp :
Page 52/66
OFPPT
Lignes 3 et 8 : les messages sont placs en 1re position dans le ListBox afin que les vnements les plus rcents soient les premiers dans la liste.
Pour crer un menu, on choisit le composant " MenuStrip" dans la barre "Menus & Tollbars" :
Page 53/66
OFPPT
[1] : choix du composant [MenuStrip] [2] : on a alors un menu qui s'installe sur le formulaire avec des cases vides intitules "Type Here". 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 :
Page 54/66
OFPPT
Les options de menu sont des contrles comme les autres composants visuels et ont des proprits et vnements. Par exemple les proprits de l'option de menu A1 sont les suivantes :
Dans la structure du menu, slectionnons l'option A1 et cliquons droit pour avoir accs aux proprits du contrle :
Page 55/66
OFPPT
Dans cette mthode, nous nous contenterons d'afficher dans le label labelStatut la proprit Text 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 type ToolStripMenuItem, aussi est-on oblig de faire un transtypage de object vers ToolStripMenuItem. 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.
Nous nous intressons maintenant un certain nombre de composants non visuels : on les utilise lors de la conception mais on ne les voit pas lors de l'excution.
Page 56/66
OFPPT
Page 57/66
OFPPT
Page 58/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 de dialogue dite modale). L'utilisateur fixe le nom du fichier sauvegarder et quitte la bote soit par le bouton Enregistrer, soit par le bouton Annuler, 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 y crit le contenu du TextBox : textBoxLignes.Text tout en grant les exceptions qui peuvent se produire.
La classe OpenFileDialog est trs proche de la classe SaveFileDialog. On utilisera les mmes mthodes et proprits que prcdemment. La mthode ShowDialog affiche une bote de dialogue analogue la suivante :
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 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 de dialogue dite modale). L'utilisateur fixe le nom du fichier sauvegarder et quitte la bote soit par le bouton Ouvrir, soit par le bouton Annuler, 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 openFileDialog1. On est alors ramen la lecture classique d'un fichier texte. On notera, ligne 16, la mthode qui permet de lire la totalit d'un fichier.
Page 60/66
OFPPT
Les classes FontDialog et ColorDialog ont une mthode ShowDialog analogue la mthode ShowDialog des classes OpenFileDialog et SaveFileDialog. La mthode ShowDialog de la classe ColorDialog permet de choisir une couleur [1]. Celle de la classe FontDialog permet de choisir une police de caractres [2] :
[1] : si l'utilisateur quitte la bote de dialogue avec le bouton OK, ShowDialog est DialogResult.OK et la couleur choisie est dans la ColorDialog utilis. [2] : si l'utilisateur quitte la bote de dialogue avec le bouton OK, ShowDialog est DialogResult.OK et la police choisie est dans la FontDialog utilis.
le rsultat de la mthode proprit Color de l'objet le rsultat de la mthode proprit Font de l'objet
Nous avons dsormais les lments pour traiter les clics sur les boutons Couleur et Police :
Page 61/66
OFPPT
ligne [4] : la proprit [ForeColor] d'un composant TextBox dsigne la couleur de type [Color] des caractres du TextBox. Ici cette couleur est celle choisie par l'utilisateur dans la bote de dialogue de type [ColorDialog]. ligne [12] : la proprit [Font] d'un composant TextBox dsigne la police de caractres de type [Font] des caractres du TextBox. Ici cette police est celle choisie par l'utilisateur dans la bote de dialogue de type [FontDialog]
11.
Timer
En [4], nous voyons le chronomtre en marche, en [5] le chronomtre arrt. Pour changer toutes les secondes le contenu du Label LabelChrono, il nous faut un composant qui gnre un vnement toutes les secondes, vnement qu'on pourra intercepter pour mettre jour l'affichage du chronomtre. Ce composant c'est le Timer [1] disponible dans la bote outils Components [2] :
Page 62/66
OFPPT
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 est trait par la procdure buttonArretMarche_Click suivante :
Page 63/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 les secondes :
Page 64/66
OFPPT
12.
Regroupement de contrles
On 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 regrouper plusieurs 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 un indice visuel logique (Tous les RadioButton permettrons un choix dans une mme catgorie de donnes). 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 sont galement dplacs.
b) PictureBox
Le contrle PictureBox peut afficher une image mais peu aussi servir de conteneur d'autres contrles. Retenons la notion de conteneur qui est le contrle parent.
c) TabControl
Ce contrle permet de crer des onglets comme dans un classeur, onglets entirement grs par C#. Chaque page peut contenir d'autres contrles. En mode conception, en passant par la proprit TabPages, on ajoute des onglets dont la proprit Text contient le texte afficher en haut (Ici: Page 1..). il suffit ensuite de cliquer sur chaque onglet et d'y ajouter les contrles.
Page 65/66
OFPPT
Page 66/66
OFPPT