Vbnet Interface Utilisateur

download Vbnet Interface Utilisateur

of 112

Transcript of Vbnet Interface Utilisateur

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Linterface Utilisateur3.1 Linterface UtilisateurElle correspond aux fentres et contrles que voit l'utilisateur. On a vu que le dveloppeur dessine cette interface en mode conception (Design) dans l'IDE. Rappel : Comment crer une fentre ? Menu Projet, Ajouter un formulaire Windows, cliquer sur WindowsForm, une fentre Form1 apparat. On a bien cre une fentre avec la classe WindowsForms.Form (En fait on a cre une Classe 'Form1'). Comment ajouter un bouton ? Cliquer sur Boite Outils gauche , bouton WindowsForms, puis bouton Button,cliquer dans Form1, dplacer le curseur sans lcher le bouton, puis lcher le bouton : un bouton apparat.

Comment ajouter un label ? Un label est un contrle qui permet dafficher un texte. Comme pour le bouton cliquer sur Boite Outils gauche, bouton WindowsForms, bouton Label et mettre un contrle label sur la fentre. On obtient dans la fentre principale :

Modifier les proprits de l'objet. Il suffit ensuite de modifier les proprits de l'objet point (celui qui est entour de petit carrs) pour lui donner laspect dsir. Les proprits sont accessibles dans la fentre de

Hamid AZZI

1

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEproprits de droite.

TDI 1 GB 2007/2008

Dans le code des procdures les proprits des objets sont aussi accessibles. Button1.Text="OK" permet par exemple de modifier la proprit Text d'un bouton. Noter que pour modifier la taille des objets, on peut le faire trs facilement la souris en cliquant sur les petits carr entourant l'objet et en tirant les bords (On peut interdire les modifications de taille et de position des contrles par le menu Format puis verrouiller les contrles une fois que leurs tailles et positions est bien dfinies.). Tous les objets ont des proprits communes Celles hrites de la Classe Control' quil faut connatre: Name : il sagit du nom de lobjet tel quil est gr par lapplication. Par dfaut, VB baptise tous les objets que vous crez de noms gnriques, comme Form1, Form2, Form3 pour les fentres, List1, List2 pour les listes... Accessible en mode conception uniquement.

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 - Lst pour les ListBox - Chk pour les CheckBox - Cbo pour les combos - Dlg pour les DialogBox - Frm pour les Form - Lbl pour les labels

Hamid AZZI

2

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLETxt Tb Rb Mm Tmr pour pour pour pour pour les Textbox les Toolsbar les radiobutton les menus les timers

TDI 1 GB 2007/2008

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" 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. Vous pouvez dsactiver les contrles ne s'appliquant pas l'tat actuel de l'application. Vous pouvez galement dsactiver un contrle pour interdire son utilisation. Par exemple, un bouton peut tre dsactiv pour empcher l'utilisateur de cliquer dessus. Si un contrle est dsactiv, il ne peut pas tre slectionn. Un contrle dsactiv est gnralement gris. Exemple : dsactiver le ButtonOk ButtonOk.Enabled=False Visible : Indique si un contrle est visible ou non. ButtonOk.Visible=False fait disparatre le bouton. Attention pour rendre visible une fentre on utilisa la mthode .Show. Font : Permet le choix de la police de caractres affiche dans lobjet. BackColor ForeColor : Couleur du fond, Couleur de lavant plan Pour un bouton Forecolor correspond au cadre et aux caractres. ButtonOk.ForeColor= System.Drawing.Color.Blue Tag : Permet de stocker une valeur ou un texte li l'objet. Chaque objet a un Tag qui peut contenir du texte. On l'utilise souvent comme un Flag li l'objet. Par exemple: une liste peut contenir la liste des CD ou des DVD ou des K7, quand je charge la liste des CD, je rajoute List1.Tag="CD" cela permet ultrieurement de voir ce qu'il y a dans la liste. Il y a bien d'autres proprits.

Hamid AZZI

3

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Evnements lis aux objets On a vu que les objets de l'interface utilisateur ont des procdures dclenches par les vnements de cet objet. 2 exemples : - Quand l'utilisateur clique sur un bouton Ok, la procdure ButtonOk_Click s'effectue. - Quand l'tat (coch ou non coch) d'une case cocher nomme CouleurRouge change, la procdure CouleurRouge.CheckedChanged est active. La syntaxe complte de la procdure est: Private Sub CouleurRougeCheckedChanges (ByVal sender As System.Objet, ByVal e As System.EventArgs) Handles CouleurRouge.CheckedChanged End Sub Dtaillons : La procdure vnement est prive (Private). Aprs le nom Sub il y a un nom de procdure (CouleurRougeCheckedChanges) Handles indique quel objet et vnement dclench la procdure. (On verra qu'il peut y en avoir plusieurs.) A noter que Sender contient le contrle ayant dclench l'vnement et e l'vnement correspondant. sender.Name contient par exemple le nom du contrle ayant dclench l'vnement. On voit que quand on cre un objet, ses procdures vnements sont automatiquement cres. On se rend compte que dans une procdure vnement on peut modifier (en mode conception) ou lire (en mode Run) quel objet et quel vnement a dclench la procdure. On peut mme indiquer plusieurs objets lis cette procdure. Certains vnements sont communs tous les contrles : - Click - DoubleClick - GotFocus - LostFocus - KeyUp - KeyPress - KeyDown Il y a toujours des mthodes Changed dclenches par un changement CheckedChanged pour une case cocher, TextChanged pour un contrle texte. d'tat :

Pour ne pas alourdir les exemples, nous crivons souvent une version simplifie de l'en-tte de la procdure. En rsum : Le programmeur dessine les fentres et contrles. Il peut modifier les proprits des objets dessins : - Par la fentre de proprits (en mode conception). - Par du code (des instructions) dans les procdures.

Hamid AZZI

4

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

3.2 Les Forms

TDI 1 GB 2007/2008

Elles correspondent aux fentres ou 'formulaires'. Crer une fentre en mode conception : Menu Projet, Ajouter un formulaire Windows, cliquer sur WindowsForm, une fentre Form1 apparat. On a bien cre une fentre avec la classe WindowsForms. Toute linterface se trouve sur des fentres. En VB.net on parle de formulaire.

Proprits Bien sur, la fentre possde des proprits qui peuvent tre modifies en mode design dans la fentre 'Proprits' droite ou par du code: Name : Nom du formulaire. Donner un nom explicite, par exemple FrmDemarrage Ds quune fentre est cre on modifie immdiatement ses proprits en mode conception pour lui donner laspect que lon dsire. Text : Cest le texte qui apparatra dans la barre de titre en haut. Text peut tre modifi par le code : Form1.text= "Fentre" 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. Comment crer une icne ? Dans l'IDE de VB. Menu Fichier>Nouveau>Fichier cliquez sur Icon, Vb ouvre une fentre Icon1 (dans l'diteur d'images de Visual Studio.Net) Cela permet de crer ou modifier une icne (Fichier>Ouvrir>Fichier pour modifier). Comment enregistrer ? Click droit dans l'onglet 'Icon1' ouvre un menu contextuel permettant d'enregistrer votre Icne. WindowState : Donne ltat de la fentre : Plein cran (FormWindowState.Maximized), (FormWindowState.Normal), dans la barre de tache (FormWindowState.Minimized). normale

Hamid AZZI

5

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEExemple : mettre une fentre en plein cran avec du code. me.WindowState =FormWindowState.Maximized (Quand on tape Me.WindowsState= Vb donne la liste, l'numration)

TDI 1 GB 2007/2008

ControlBox Si cette proprit comme valeur False, les boutons de contrle situs droite de la barre de la fentre napparaissent pas. MaximizeBox Si cette proprit comme valeur False, le boutons de contrle Plein cran situs droite de la barre de la fentre napparat pas. MinimizeBox Si cette proprit comme valeur False, le boutons de contrle Minimize situs droite de la barre de la fentre napparat pas. 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 : Me.FormBorderStyle =FormBorderStyle.Sizable 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... ? Me.StartPosition =FormStartPosition.CenterScreen MinSize et MaxSize Donne les dimensions minimums et maximums que l'on peut utiliser pour redimensionner une fentre. Opacity Allant de 0% 100%, permet de crer un formulaire plus ou moins transparent. Exemple: Me.FormBorderStyle= Sizable Me.ControlBox=False Donne la fentre :

Ouvrir une fentre On vient de dessiner une Form1 et une Form2 c'est donc les Class 'Form1 et 'Form2' (les moules) que l'on a dessin. Si dans une routine de la Form1 on veut ouvrir une seconde fentre de type Form2, il

Hamid AZZI

6

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEfaut : Crer un Objet fentre (formulaire) avec le moule Form2 : Dim f As New Form2() La nouvelle instance f de la Class 'form2' est un objet fentre. Pour la faire apparatre j'utilise la mthode :.ShowDialog. f.ShowDialog()

TDI 1 GB 2007/2008

La fentre f est modale car on a utilis ShowDialog : quand elle est ouverte, on ne peut pas aller dans une autre fentre de l'application avant de sortir de celle l. (A titre d'exemple les fentres MessageBox sont toujours Modales). Utiliser .show pour ouvrir une feuille non modale. Attention : une fentre est un objet et est 'visible' suivant les rgles habituelles des objets. Si on instance une fentre partir d'une procdure, elle sera visible dans cette procdure. Si elle est 'Public' et instance dans un module standard, elle sera visible partout. Evnements Au cours de l'excution: Quand la feuille est charge la procdure Form1_Load() est active. On pourra donc y mettre le code initialisant la feuille. Form1_Activated() est excut ensuite car la feuille deviendra active. Form1.GotFocus() est enfin excut puisque la fentre prend le focus. Form1.Enter () est excut lorsque l'utilisateur entre dans la fentre. Ds qu'une proprit change de valeur un vnement 'PropritChanged' se dclenche : - Form1.BackColorChanged se dclenche par exemple quand la couleur du fond change. - Form1.Resized se dclenche quand on modifie la taille de la fentre. (Cest intressant pour interdire certaines dimensions) Form1.Leave survient dans il y a perte du focus. Bien sur il existe aussi Form1_Desactivate quand la fentre perd le focus et n'est plus active. Form1.Closing se produit pendant la fermeture de la fentre (on peut annuler cette fermeture en donnant la variable Cancel la valeur True) Form1.Closed se produit lorsque la fentre est ferme. Il y en a beaucoup d'autres comme par exemple les vnements qui surviennent quand on utilise la souris (MouveUp, MouseDown, MouseMove) ou le clavier (KeyUp, KeyDown, KeyPress) sur la fentre, Left Right, Size, Position pour positionner la fentre ou dfinir sa taille Mthodes On a dj vu que pour faire apparatre une fentre il faut utiliser .ShowDialog (pour qu'elle soit modale) ou .Show (pour non modale). Me.Close ferme le formulaire. Me.Activate l'active s'il est visible

Hamid AZZI

7

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEMe.Hide rend la fentre invisible.

TDI 1 GB 2007/2008

System.Windows.Forms.Form On se rend compte que quand on dessine une fentre Form2 par exemple, VB cre une nouvelle classe 'Class Form2' Public Class Form2 End Class Elle hrite de System.Windows.Forms.Form, on voit bien dans le code : Inherits Systeme.Windows.Forms.Form

Elle contient : - du code gnr automatiquement par le concepteur Windows Forms (on peut le voir en cliquant sur le petit '+') et qui cre la fentre et ses contrles. - les procdures lies aux vnements. Quand on tape Dim f As New Form2(), on cre une instance de la Class Form2. Formulaire davant plan Pour dfinir au moment de la conception un formulaire en tant que formulaire d'avant-plan d'une application : - 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 : - Dans une procdure, attribuez la proprit TopMost la valeur true. Me.TopMost = True

Hamid AZZI

8

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.3 Les BoutonsIls sont omniprsents dans les 'formulaires'. Crer un bouton : Cliquer sur Boite Outils gauche , bouton Windows Forms, puis bouton Button,cliquer dans Form1, dplacer le curseur sans lcher le bouton, puis lcher le bouton : un bouton apparat.

Modifier ses proprits : Name est utilis pour lui donner un nom explicite (BoutonOk BoutonCancel) FlatStyle donne un aspect au bouton (Flat, standard, System)

Text contient le texte afficher sur le bouton. ForeColor correspond la couleur de ce texte (BackColor tant la couleur du fond) Si on y inclut un & la lettre qui suit sera soulign et sert de raccourci clavier. &Ok donne sur le bouton Ok. TextAlign permet de positionner le texte dans le bouton. Image contient le nom de limage afficher sur le bouton (si on veut afficher une image, on le fait en mode Design; noter que quand on distribue l'application, il n'y a pas besoin de fournir le fichier contenant l'image avec lapplication). (AlignImage permet de positionner limage sur le bouton.)

On peut aussi puiser une image dans une ImageList grce la proprit ImageList et ImageIndex, on peut ainsi changer dimage. La proprit BackGroundImage permet de mettre une image de fond. Exemple : button1.Text="Ok" affiche 'Ok' dans le bouton. Utiliser les vnements : Lvnement principalement utilis est Click() : quand lutilisateur clique sur le bouton la procdure est traite. Private Sub Button_Click(..) End Sub Cette procdure contient le code qui doit tre excut lorsque l'utilisateur clique sur le bouton. Le bouton peut tre slectionn grce un clic de souris, la touche ENTRE ou la BARRE D'espacement si le bouton a le focus. Crer un bouton Ok ou Cancel : Parfois il faut permettre aux utilisateurs de slectionner un bouton en appuyant sur la touche

Hamid AZZI

9

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEENTRE mme si le bouton n'a pas le focus.

TDI 1 GB 2007/2008

Exemple : Il y a sur la fentre un bouton "Ok" qui doit tre enfonc quand l'utilisateur tape 'Enter' au clavier, c'est le bouton qui 'valide' le questionnaire ( et qui le ferme souvent). Comment faire? Dfinissez la proprit AcceptButton de la Form en lui donnant le nom du bouton. Cela permet au formulaire d'avoir le comportement d'une bote de dialogue. Cration d'un bouton par code : L'exemple suivant cre un Button nomm Button1 sur lequel on voit "Ok", on modifie certaines de ses proprits et l'ajoute Form. Private Sub InitializeMonButton() Dim button1 As New Button1() button1.Text="Ok" ' Ajouter le bouton la Form Controls.Add(button1) End Sub Il faut par code crer aussi les vnements lis ce bouton: dans ce cas il faut dclarer le bouton plutt avec la syntaxe contenant WithEvents et en haut du module. Private WithEvents Button1 As Button Puis crire la sub vnement. Sub OnClique ( sender As Objet, EvArg As EventArgs) Handles Button1 End Sub Ainsi VB sait que pour un vnement sur le Button1, il faut dclencher la Sub OnClique. (On reviendra sur cela) Couleur transparente dans les images des boutons: On a vu qu'on pouvait mettre une image dans un bouton, il faut pour cela donner la proprit Image le nom du fichier contenant l'image, ceci en mode Design. Mais l'image est souvent dans un carr et on voudrait ne pas voir le fond (rendre la couleur du fond transparente) Voici limage , je voudrais ne pas afficher le 'jaune' afin de voir ce qu'il y a derrire et

donner l'aspect suivant Dans Visual Basic 6.0, la proprit MaskColor tait utilise pour dfinir une couleur qui devait devenir transparente, permettant ainsi l'affichage d'une image d'arrire plan. Dans Visual Basic .NET, il n'existe pas d'quivalent direct de la proprit MaskColor!!! Cependant, on peut ruser et dfinir la transparence : Dans le " Code gnr par le Concepteur Windows Form " aprs la dfinition du bouton ou dans Form_Load ajouter: Dim g As New System.Drawing.Bitmap(Button1.Image) g.MakeTransparent(System.Drawing.Color.Yellow) Button1.Image = g On rcupre le Bitmap de l'image du bouton, on indique que le jaune doit tre transparent, on remet le BitMap. Bien sur il y a intrt choisir une couleur (toujours la mme) qui tranche pour les fonds de dessin et ne pas l'utiliser dans le dessin lui mme.

Hamid AZZI

10

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.4 Les TextBoxLes contrles permettant de saisir du texte sont : Les TextBox Les RichTexteBox Les contrles TextBox Contrle qui contient du texte qui peut tre modifi par l'utilisateur du programme. C'est la proprit Text qui contient le texte qui a t tap par l'utilisateur. Exemple trs simple : Comment demander son nom l'utilisateur ? Il faut crer un label dont la proprit Text contient "Tapez votre nom:", suivi d'un TextBox nomm txtNom avec une proprit Text="" (Ce qui fait que la TextBox est vide), enfin un bouton nomm btOk dont la proprit Text="Ok". Cela donne : Tapez votre nom: Ok

txtNom.Select() dans Form_Load donne le focus la TextBox Une fois que l'utilisateur a tap son nom, il clique sur le bouton 'Ok'. Dans la Sub btOk_Click il y a: Dim Nom As String Nom= txtNom.Text La variable Nom contient bien maintenant le nom de l'utilisateur. Un TextBox correspond un mini diteur de texte. (Mais sans enrichissement: sans gras, ni italique) La police de caractres affectant la totalit du texte peut simplement tre modifie par la proprit Font. La couleur du texte peut tre modifie par ForeColor, mais la totalit du texte aura la mme couleur.

La proprit .text permet aussi de modifier le texte visible dans le contrle. TextBox1.text="Bonjour" Affiche Bonjour dans le contrle. Parmi les multiples proprits de ce contrle, signalons : Multiline : autorise ou non lcriture sur plusieurs lignes. Scrollbars : fait figurer une barre de dfilement horizontale ou verticale (ou les deux). PaswordChar : crypte le texte entr sous forme dtoiles. MaxLength : limite le nombre de caractres quil est possible de saisir. TextBox1.MaxLength= 3 'limite la saisie 3 caractres. TextBox1.MaxLength= 0 'ne limite pas la saisie. TextLength : donne la longueur du texte En mode MultiLine la collection Lines contient dans chacun de ses lments une des lignes affiches dans le contrle : TexBox1.Lines(0) contient la premire ligne TexBox1.Lines(1) la seconde... Les TextBox contiennent une mthode Undo, annulation de la dernire modification. La proprit CanUndo du TextBox doit tre True.

Hamid AZZI

11

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Ensuite pour modifier: If textBox1.CanUndo = True Then textBox1.Undo() ' Vider le buffer Undo. textBox1.ClearUndo() End If Ajouter au texte : On peut ajouter du texte au texte dj prsent dans le TextBox textBox2.AppendText(MonText) C'est quivalent textBox2.Text=textBox2.Text+MonText Evnements lis aux 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. KeyDown et KeyUp permettent aussi de voir si MAJ ALT CTRL ont t presss. On peut rcuprer la touche press (dans e.KeyChar), mais impossible d'en modifier la valeur (e.KeyChar est en lecture seule par exemple) Comment rcuprer la totalit du texte qui est dans le TextBox ? T= textBox1.Text Comment mettre les lignes saisies par l'utilisateur dans un tableau ? Dim tempArray() as String tempArray = textBox1.Lines 'On utilise la collection Lines Comment rcuprer la premire ligne ? T= textBox1.Lines(0) Si une partie du texte est slectionne par l'utilisateur, on peut la rcuprer par : T= TexBox1.SelectedText Pour slectionner une portion de texte on utilise TextBox1.SelectionStart=3 'position de dpart TextBox1.SelectionLength=4 'nombre de caractre slectionn On peut aussi crire : TextBox1.Select(3,4) puis TexBox1.SelectedText="toto" 'remplace la slection par 'toto' Comment positionner le curseur aprs le troisime caractre ? En donnant la proprit SelectionStart la valeur 3 TextBox1.SelectionStart=3 SelectionLength doit avoir la valeur 0 Comment interdire la frappe de certains caractres dans une TextBox? Exemple :

Hamid AZZI

12

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Ne permettre de saisir que des chiffres. Pour cela il faut utiliser l'vnement KeyPress du textBox qui retourne un objet e de type KeyPressEventArgs. e.KeyChar contient le caractre press, mais il est en lecture seule!! on ne peut le modifier. Pour annuler la frappe (dans notre exemple si le caractre n'est pas un chiffre) il faut faire e.handled=True. IsNumeric permet de tester si le caractre est numrique. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If IsNumeric(e.KeyChar) Then e.Handled = False Else e.Handled = True End If End Sub Compter combien de fois on a tap certains caractres? Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress Select Case e.KeyChar ' Compte les backspaces. Case ControlChars.Back Nombrebackspace = Nombrebackspace + 1 ' Compte les ENTER. Case ControlChars.Lf Nombrereturn = Nombrereturn + 1 ' Compte les ESC. Case Convert.ToChar(27) NombreEsc = NombreEsc + 1 ' Compte les autres. Case Else keyPressCount = keyPressCount + 1 End Select End Sub Petite parenthse: Pour comparer les caractres il y a 2 mthodes: if e.KeyChar=Convert.ToChar(27) then ou if AscW(e.Keychar)=27 then Diffrentes manires de rcuprer ce qui a t tap : On a vu que TextBox.text contient la totalit du texte; si on l'utilise dans l'vnement TextBox1_TextChanged, on rcupre le nouveau texte ds que l'utilisateur tap quelque chose. TextBox1_KeyPress() et TextBox1_KeyUp() permettent de rcuprer le caractre qui t tap. Y a t-il un moyen de modifier le caractre tap ? Les proprits de e comme e.KeyChar (dans KeyPress) ou e.KeyCode, e.KeyData e.KeyValue dans les vnements KeyPress et KeyDown sont en lecture seule!!! Une solution est de modifier directement le texte : e As

Hamid AZZI

13

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Exemple : Si l'utilisateur tape ',' afficher '.' la place. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress Dim pos As Integer pos = TextBox1.SelectionStart 'on mmorise la position du curseur If e.KeyChar = "," Then e.Handled = True 'on ne valide pas le caractre ',' qu n'apparatra pas. TextBox1.Text = TextBox1.Text.Insert(pos, ".") 'on insre un '.' TextBox1.SelectionStart = pos + 1 'on avance le curseur d'un caractre End If End Sub

Autre solution? Le contrle RichTextBox Si vous tes dbutant, passez un rubrique suivante, vous reviendrez plus tard la gestion du code RTF. Rich Text veut dire 'Texte enrichi'. Le contrle RichTextBox permet d'afficher, d'entrer et de manipuler du texte mis en forme. Il effectue les mmes tches que le contrle TextBox, mais il peut galement afficher des polices, des couleurs et des liens, charger du texte et des images incorpores partir d'un fichier, ainsi que rechercher des caractres spcifiques.

Le contrle RichTextBox a les possibilits dun traitement de texte comme Word.

Qu'est ce que RTF ? Le format du texte que lon peut mettre dans une RichTextBox est le format RTF (Rich Text Format = Format de Texte Enrichi) Explication : un texte peu tre enregistr en brut (sans enrichissements) en RTF (Utilisable dans la plupart des traitements de texte), au format Word (.doc) Pour utiliser les fonctionnalits du RichTextBox il faut utiliser la proprit .Rtf. Quand jaffecte un texte la proprit .Text il est affich tel quel, sans tenir compte de lenrichissement. Quand jaffecte un texte la proprit .Rtf du contrle pour lafficher, s'il contient des enrichissements au format RTF, lenrichissement est affich. Les bases du codage RTF Le texte doit dbuter par '{' et se terminer par '}', il peut aussi dbuter par "{\rtf1\ansi " Ensuite les enrichissements seffectuent par des balises qui indiquent le dbut et la fin de lattribut, une balise commence par le caractre '\' : Entre \b et \b0 le texte sera en gras (Bold)

Hamid AZZI

14

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Exemple : Ajoute le texte "Ce texte est en gras." un contrle RichTextBox existant. RichTextBox1.Rtf = "{\rtf1\ansi Ce texte est en \b gras\b0.}" Voici les principaux attributs : \b \b0 ce qui est entre les 2 balises est en gras \i \i0 ce qui est entre les 2 balises est en italique \par fin paragraphe (passe la ligne) \f font \f1 .. \f0 font numro 1 entre les 2 balises \plain ramne les caractres par dfaut \tab caractre de tabulation \fs taille de caractre \fs28 = taille 28 Mettre un espace aprs la balise. Comment afficher un texte enrichir ? RichTextBox1.RTF= T 'T tant le texte enrichi Mettre un texte en couleurs, utiliser plusieurs polices : Mettre la table des couleurs en dbut de texte : { \colortbl \red0\green0\blue0;\red255\green0\blue0;\red0\green255\blue0;} Aprs Colortbl (Color Table) chaque couleur est code avec les quantits de rouge vert et bleu. Les couleurs sont repres par leur ordre: couleur 0 puis 1 puis 2... et spares par un ';' Dans notre exemple couleur 0=noir; couleur 1=rouge; couleur 2=vert Pour changer la couleur dans le texte on utilise \cf puis le numro de la couleur : \cf1 toto \cf0 } toto est affich en rouge. Pour modifier les polices de caractre, le procd est similaire avec une Font Table : {\fonttbl {\fo\froman Symbol;} {\f1\fswiss Arial;} } Pour passer en Arial \f1 ..\f0 Exemple complet : "{\rtf1\ansi { \colortbl \red0\green0\blue0; \red255\green0\blue0; \red0\green255\blue0;} {\fonttbl {\fo\froman Symbol;} {\f1\fswiss Arial;} } Ce qui suit est en \f1 \cf1 \i Arial Rouge Italique \f0 \cf0 \i0 } Cela donne :

Hamid AZZI

15

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Nb : Si vous copier coller lexemple pour lessayer, enlever les sauts la ligne. Comment modifier laspect du texte qui a t slectionn ? On nest plus dans le cas ou on affiche demble la totalit du texte, mais dans le cas ou lutilisateur veut modifier son texte qui est dj dans le contrle. Exemple : Lutilisateur slectionne une portion du texte dans le contrle puis clique sur une bouton nomm Rouge pour mettre la slection en rouge. Dans BoutonRouge_Click() crire : RichTextBox1.SelectionColor = System.Drawing.Color.Red De mme pour modifier la police, la hauteur de la police, laspect gras ou non : RichTextBox1.SelectionFont = New Font("Tahoma", 12, FontStyle.Bold) Enfin le texte peut tre enregistr dans un fichier : richTextBox1.SaveFile(FileName, RichTextBoxStreamType.RichText) Si on remplace .RichText par .PlainText cest le texte brut et non le texte enrichi qui est enregistr. Pour lire un fichier il faut employer .LoadFile avec la mme syntaxe. Comment faire une recherche dans le texte? La fonction Find permet de rechercher une chane de caractres dans le texte : richTextBox1.Find(searchText, searchStart, searchEnd, RichTextBoxFinds.MatchCase) La mthode retourne l'emplacement d'index du premier caractre du texte recherch et met en surbrillance ce dernier, sinon, elle retourne la valeur -1.

Hamid AZZI

16

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.5 Les labelsIl y a 2 sortes de Label : - Les Label - Les LinkLabel Les Label : On en a dj utilis pour afficher du texte non modifiable par l'utilisateur. Les contrles Label sont gnralement utiliss pour fournir un texte descriptif un contrle. Vous pouvez par exemple utiliser un contrle Label pour ajouter un texte descriptif un contrle TextBox. Ceci a pour but d'informer l'utilisateur du type de donnes attendu dans le contrle. Exemple hyper simple : Donner votre nom: La lgende qui s'affiche dans l'tiquette est contenue dans la proprit Text du label1. Pour modifier le texte du label par du code : Label1.Text="Donner votre Prnom" La proprit Alignement vous permet de dfinir l'alignement du texte dans l'tiquette (centr, droite, gauche), BorderStyle permet de mettre une bordure (un tour) ou non.. Il est galement possible dy afficher une image avec la proprit .Image Remarquez que la mise jour de l'affichage du Label (comme les autres contrles d'ailleurs) est effectue en fin de Sub: Si on crit : Dim i As Integer For i = 0 To 100 Label1.Text = i.ToString Next i La variable i prend les valeurs 1 100, mais l'affichage rien ne se passe pendant la boucle, VB affiche uniquement 100 la fin. Si on dsire voir les chiffres dfiler avec affichage de 0 puis 1 puis 2..., il faut rafrachir l'affichage chaque boucle avec la mthode Refresh() : Dim i As Integer For i = 0 To 100 Label1.Text = i.ToString: Label1.Refresh() Next i Les LinkLabel : Permettent de crer un lien sur un label. Text Indique le texte qui apparat.

Hamid AZZI

17

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

LinkArea dfini la zone de texte qui agira comme un lien, dans la fentre de proprit taper 11 ;4 (on verra que cest plus simple que de le faire par code) Les 4 caractres partir du 11me seront le lien, ils seront souligns. Ne pas oublier comme toujours que le premier caractre est le caractre 0. Lvnement LinkClicked est dclench quand lutilisateur clique sur le lien. Dans cette procdure on peut permettre le saut vers un site Internet ou toute autre action. Exemple : LinkLabel1.text= "Visitez le site LDF" LinkLabel1.LinkArea = New System.Windows.Forms.LinkArea(11, 4) Pourquoi faire simple !! Cela affiche :

Si lutilisateur clique sur le mot site, la procdure suivante est dclenche : Private Sub LinkLabel1.LinkClicked Il est possible de modifie la couleur du lien pour indiquer qu'il a t utilis : Si VisitedLinkColor contient une couleur e.visited=True modifie la couleur. (e est l'lment qui a envoyer l'vnement, j'en modifie la proprit Visited.) On peut y inclure une action quelconque, en particulier un saut vers un site Web : System.diagnostics.Process.Start(" http://plasserre.developpez.com/ ") 'correspond au code qui ouvre un browser Internet (Internet Explorer ou Netscape) et qui charge la page dont l'adresse est indique. La collection Links permet dafficher plusieurs liens dans un mme texte, mais cela devient vite trs compliqu.

Hamid AZZI

18

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.6 Les Cases cocherIl y a 2 sortes de case cocher : - Les CheckBox - Les RadioButton Les " cases cocher " (CheckBox) : Elles sont carres, et indpendantes les unes des autres, si l'utilisateur coche une case , cela n'a pas d'influence sur les autres cases du formulaire, qu'elles soient regroupes dans un cadre pour faire plus joli ou non. Les " boutons radio " (RadioButton) : Ils sont ronds et font toujours partie dun groupe (Ils sont dans une fentre ou dessins dans un objet GroupBox). Ce groupe est indispensable, car au sein dun groupe de RadioButton, un seul bouton peut tre coch la fois : si lutilisateur en coche un, les autres se dcochent.

Il faut regrouper les radios boutons dans des 'GroupBox' par exemple pour rendre les groupes indpendants :

Ici si je clique sur le bouton 'OUI' droite, cela dcoche 'NON' mais n'a pas d'influence sur le cadre Format. La proprit Text, bien sur, permet dafficher le libell cot du bouton, on peut aussi mettre une image avec la proprit Image. CheckAlign permet de mettre la case cocher droite ou gauche du texte, TextAlign permet d'aligner le texte. Exemple pour le bouton en haut droite : RadioButton3.Text = "OUI" RadioButton3.TextAlign = MiddleCenter RadioButton3.CheckAlign = MiddleRight

'Middle=hauteur, center = horizontale

La proprit la plus intressante de ces cases est celle qui nous permet de savoir si elle est coche ou non. Cette proprit sappelle Checked. Sa valeur change de False True si la case est coche. RadioButton.Checked = True 'Coche le bouton If RadioButton.Checked = True Then ' Teste si le bouton est coch. End If La procdure RadioButton.CheckedChange() permet dintercepter le changement dtat dun bouton. Pour le CheckButton TreeState permet de dfinir 3 tats au lieu de 2 (coch, indtermin = gris, non coch) CheckedState indique un des 3 tats (alors que Checked nen indique que deux.) Appearance peut aussi donner une apparence de bouton la case cocher. Il est enfonc

Hamid AZZI

19

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEou pas en fonction de la valeur de Checked.

TDI 1 GB 2007/2008

Ici les 2 boutons ont une Appearance = Button, celui du haut n'est pas coch, l'autre est coch (enfonc).

Hamid AZZI

20

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.7 Les Contrles listeIl y a 4 sortes de listes : Les ListBox Les CheckedListBox Les Combos Les ListView

Les ListBox Le contrle ListBox affiche une liste d'lments (d'objets) dans laquelle l'utilisateur peut faire un ou plusieurs choix.

La liste contient "tarte", "poisson", "viande", "lgumes", "sauces". Ici l'lment "poisson" est slectionn, il est en bleu. La listBox contient une collection d'"Item": Elle na pas de nombre initialement dfini dlment. Si j'ajoute un lment la ListBox, cela ajoute un lment la collection Items Items est une collection contenant tous les lments (les objets) chargs dans la liste. ListBox1.Items est la collection du contrle ListBox1 La proprit Items.Count indique le nombre d'lments contenus dans la liste. Attention le premier lment est toujours llment 0, aussi le nombre dlments est gal au numro de l'lment le plus haut plus un. Pour ajouter ou supprimer des lments dans un contrle ListBox. Utilisez la mthode Items.Add, Items.Insert, Items.Clear ou Items.Remove. En mode conception, vous pouvez galement utiliser la proprit Items. Exemples : Vider la ListBox : ListBox1.Items.Clear() Ajouter l'lment "poisson" ListBox1.Items.Add("poisson") Ajouter '4' ListBox1.Items.Add(4.Tostring) ou ListBox1.Items.Add(4) 'accept car les items sont des objets. Insrer 'lulu en 4me position ListBox1.Items.Insert(4, "lulu") Les listBox acceptent des objets, elles affichent gnralement ce qu'il y a dans la proprit 'Text' de l'objet.

Hamid AZZI

21

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Charger dans une ListBox1 les nombres de 1 100 : For i = 1 To 100 ListBox1.Items.Add(i.ToString) Next i Comment enlever des lments ? ListBox1.Items.RemoveAt(5) ' Enlever l'lment d'index 5. ListBox1.Items.Remove(ListBox1.SelectedItem) ' Enlever l'lment slectionn ListBox1.Items.Remove("Tokyo") ' Enlever l'lment "Tokyo". Comment lire l'lment 3 ? T=ListBox1.Items(3).ToString Comment rechercher l'lment qui contient une chane de caractres ? List1.FindString("pa") retourne le numro du premier lment commenant par 'pa'. x=List1.FindString("pa",12) retourne le numro de l'lment commenant par 'pa' en cherchant partir du 12 me lment. x=List1.FindStringExact("papier") 'permet de rechercher l'lment correspondant exactement la chane. Comment slectionner un lment par code ? ListBox1.SetSelected(x, True) Lutilisateur double-clique sur un des lments, comment rcuprer son numro ? Grce SelectedIndex. Private Sub ListBox_DoubleClick. N=ListBox1.SelectedIndex End If N contient le numro de llment slectionn. Attention comme dhabitude, si je slectionne 3 cest en faite llment numro 2. SelectedIndex retourne donc un entier correspondant l'lment slectionn dans la zone de liste. Si aucun lment n'est slectionn, la valeur de la proprit SelectedIndex est gale 1. La proprit SelectedItem retourne l'lment slectionn ("poisson" dans l'exemple si dessus). Et la multi slection, quels lments ont t slectionns ? La proprit SelectionMode indique le nombre d'lments pouvant tre slectionns en mme temps. Lorsque plusieurs lments sont slectionns, la valeur de la proprit SelectedIndex correspond au rang du premier lment slectionn dans la liste. Les collections SelectedItems et SelectedIndices contiennent les lments et les numros d'index slectionns.

Si la proprit Sorted est True, la liste est trie automatiquement. On peut 'charger' une ListBox automatiquement avec un tableau en utilisant Datasource : Dim LaList() As String = {"one", "two", "three"} ListBox1.DataSource = LaList On peut aussi utiliser AddRange : Dim Ite(9) As System.Object

Hamid AZZI

22

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEDim i As Integer For i = 0 To 9 Ite(i) = "Item" & i Next i ListBox1.Items.AddRange(Ite)

TDI 1 GB 2007/2008

Comment connatre l'index de l'lment que l'on vient d'ajouter ? (Et le slectionner) Dim x As Integer x = List1.Items.Add("Hello") List1.SelectedIndex = x On utilise la valeur retourne (x dans notre exemple) par la mthode Add. (NewIndex n'existe plus en VB.NET) Comment affecter chaque lment de la liste un numro, une cl ? Exemple : je charge dans une ListBox la liste des utilisateurs mais quand on clique sur la liste, je veux rcuprer le numro de l'utilisateur. Comment donc, chaque lment de la listbox, donner un numro (diffrent de l'index). En VB6 on utilisait une proprit (ListBox.ItemData()) pour lier chaque lment de la listBox un nombre (une cl); cela n'existe plus en VB.Net!! Il faut utiliser les fonctions de compatibilit : VB6.SetItemData(ListBox1, 0, 123) 'pour lier l'lment 0 la valeur 123. Ce nest pas simple!! Une alternative, pas trs lgante : Ajouter l'lment "toto"+chr$(9)+chr$(9)+ cl (cl n'est pas visible car les caractres tabulation l'ont affiche hors de la listbox) Quand l'utilisateur clique sur la ligne, on rcupre la partie droite donc la cl. Quand on charge une ListBox directement avec une base de donnes, il y a une solution pour grer une cl. Lorsque la proprit MultiColumn a la valeur true, la liste saffiche avec une barre de dfilement horizontale. Lorsque la proprit ScrollAlwaysVisible a la valeur true, la barre de dfilement s'affiche, quel que soit le nombre d'lments. CheckedListBox Cest une Listbox mais avec une case cocher sur chaque ligne

Attention : SelectedItems et SelectedIndices ne dterminent pas les lments qui sont cochs, mais ceux qui sont en surbrillance. La collection CheckedItems vous donne par contre les lments cochs. La mthode GetItemChecked (avec comme argument le numro d'index) dtermine si llment est coch.

Hamid AZZI

23

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEExemple :

TDI 1 GB 2007/2008

Pour dterminer les lments cochs dans un contrle CheckedListBox : Tester chaque lment de la collection CheckedItems, en commenant par 0. Notez que cette mthode fournit le numro que porte l'lment dans la liste des lments cochs, et non dans la liste globale. Par consquent, si le premier lment de la liste n'est pas coch alors que le deuxime l'est, le code ci-dessous affiche une chane du type Item coch 1 = Dans la liste : 2 . If CheckedListBox1.CheckedItems.Count 0 Then 'Sil y a des lments cochs une boucle balaye les lments cochs '(Collection CheckedItems) et affiche le numro de llment DANS LA LISTE toutes lignes. Dim x As Integer Dim s As String = "" For x = 0 To CheckedListBox1.CheckedItems.Count - 1 s = s & "Item coch " & (x+1).ToString & " = " & Dans la liste : & CheckedListBox1.CheckedItems(x).ToString & ControlChars.CrLf Next x MessageBox.Show(s) End If On rappelle comme toujours que quand on parle du 3eme lment cela correspond lindex 2. Les ComboBox Les listes Combo (Liste combin) possdent deux caractristiques essentielles par rapport aux ListBox. Elles sont modifiables : cest--dire que lutilisateur a la possibilit dentrer un lment qui ne figure pas au dpart dans la liste. Cette caractristique concerne donc les donnes proprement dites, cela se traduit par la prsence dune zone de texte en haut de la liste. Elles peuvent tre droulantes ou dj droule, cest--dire quon ne voit quun seul lment de la liste la fois et quil faut cliquer sur la flche du ct pour " dplier " la liste, ou bien que la liste est dj visible. Cest la proprit DropDownList qui gre cela.

La combos du bas a sa DropDownList=Simple Lutilisateur peut donc cliquer dans la liste (ce qui met le texte cliqu dans la zone texte), ou taper un nouveau texte. Items.Add (mthode) ajoute un lment une liste. Items.Clear (mthode) efface tous les lments dune liste. Items.Count (proprit) renvoie le nombre dlments dune liste. Multiselect (proprit) permet la slection multiple. Item.Remove (mthode) supprime un lment de la liste. Sorted (proprit) trie les lments dune liste. Comment rcuprer la zone texte quand elle change ? Elle est dans la proprit Text.

Hamid AZZI

24

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

On utilise l'vnement TextChanged qui se dclenche quand le texte est modifi. Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged Label1.Text = ComboBox1.Text End Sub Le Contrle ListView De plus en plus puissant, le contrle ListView permet dafficher des listes multi colonnes, ou des listes avec icne ou case cocher. En mode conception : La proprit View permet de dterminer laspect gnral du contrle, elle peut prendre les valeurs : - Details permet une liste avec sous lments et titre de colonnes. - Liste utilise un ascenseur horizontal. - LargeIcon - SmallIcone Par programmation cela donne : ListView1.View= View.Details Utilisons le mode dtails (Appel mode Rapport)

Comment remplir les en-ttes de colonnes ? En mode conception il y a une ligne Columns, le fait de cliquer sur le bouton dexpansion () ouvre une fentre, cliquer sur Ajouter permet dajouter une colonne, la proprit Text permet de donner un libell qui apparatra en haut de la colonne. On peut ainsi nommer les 3 colonnes ( Nombre , Carr , Cube dans notre exemple). Par programmation cela donne : ListView1.Colonns.Add ( Nombre , 60, HorizontalAlignment.Left) Pour remplir le tableau, on pourrait, sur la ligne Items de la fentre des proprits, cliquer sur et rentrer les valeurs la main.

En pratique on cre les colonnes, le nom des colonnes en mode conception, on remplit le tableau par programmation : Exemple : Faire un tableau de 3 colonnes, mettre les nombres de 1 100 dans la premire, leur carr dans la seconde, leur cube dans la troisime. Pour chaque ligne je cre un objet ListViewItem, sa proprit Text contient le texte de la premire colonne, jajoute cet objet des SubItems qui correspondent aux colonnes suivantes. Enfin jajoute le ListViewItem au contrle ListView. Dim i As Integer For i = 1 To 100

Hamid AZZI

25

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEDim LVI As New ListViewItem LVI.Text = i.ToString LVI.SubItems.Add((i * i).ToString) LVI.SubItems.Add((i * i * i).ToString) ListBox1.Items.Add(LVI) Next i

TDI 1 GB 2007/2008

Comment intercepter le numro de la ligne qui a t clique par lutilisateur (et lafficher) ? Private Sub ListBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.Click Label1.Text = ListBox1.SelectedIndices(0).ToString End Sub Si la proprit MultiSelect est False il y a, bien sur, une seule ligne slectionne, sinon les lignes slectionnes sont dans la collection SelectedIndices(). Si on voulait rcuprer le texte de la ligne slectionne, il aurait fallu utiliser : ListBox1.SelectedItems(0) Si la proprit GridLine est True, des lignes matrialisant les cases apparaissent. Si la proprit CheckedBox est True, des cases cocher apparaissent. Attention : si la somme des colonnes est plus large que le contrle, un ascenseur horizontal apparat !! Pour ne pas voir cet ascenseur, rusez sur la largeur des colonnes (cest le 2eme paramtre de la mthode .Columns.Add).

Hamid AZZI

26

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.8 Les fentres toutes faitesIl existe : - Les MessageBox. - Les InputBox Ces fentres toutes faites facilitent le travail : MessageBox : Ouvre une fentre qui prsente un message. Cest une fonction qui affiche un message dans une bote de dialogue, attend que l'utilisateur clique sur un bouton (Ok ou Oui-Non..), puis retourne une information qui indique le bouton cliqu par l'utilisateur. Reponse= MessageBox.show(TexteAAfficher,Titre, TypeBouton etIcone, BoutonParDfaut) Exemple :

Paramtres : TexteAAfficher Obligatoire. Expression String affiche comme message de la bote de dialogue (longueur maximale 1 024 caractres). N'oubliez pas d'insrer un retour chariot si le texte est long, cela cre 2 lignes. Titre Expression String affiche dans la barre de titre de la bote de dialogue. Si l'argument Titre est omis, le nom de l'application est plac dans la barre de titre. TypeBouton et Icons Expression numrique qui reprsente la somme des valeurs spcifiant -le nombre et le type de boutons afficher : MessageBoxButtons.OKOnly Un seul bouton Ok MessageBoxButtons.YesNo Deux boutons Oui Non MessageBoxButtons.OkCancel Ok et Annuler MessageBoxButtons.AbortRetryIgnore Annule Recommence Ignore .. -le style d'icne utiliser : MessageBox.Icons.Critical MessageBox.Icons.Exclamation MessageBox.Icons.Question MessageBox.Icons.Information L'identit du bouton par dfaut MessageBox.DefaultButtons.DefaultButton1 MessageBox.DefaultButtons.DefaultButton2 Retour de la fonction : Retourne une constante qui indique quel bouton t press. DialogResult.Yes

Hamid AZZI

27

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEDialogResult.No DialogResult.Cancel DialogResult.Retry DialogResult.Ok Lancienne syntaxe VB avec MsgBox est conserve :

TDI 1 GB 2007/2008

Reponse= MsgBox(TexteAAfficher, TypeBouton, Titre) Dans ce cas il faut utiliser MsgBoxStyle MggBoxIcons et MsgBoxResult pour le retour. De plus les arguments ne sont pas dans le mme ordre!! Il est conseill dutiliser MessageBox.Show ( qui est VB.NET) plutt que MsgBox qui est de la compatibilit avec VB Exemple : Reponse=MessageBox.Show(Bonjour) Affiche le message Bonjour avec un simple bouton Ok Cela sert fournir un message lutilisateur sans attendre de choix de sa part. Autre exemple en ancienne syntaxe : R=MsgBox("Continuer"& chr$(13)& "lapplication?", MsgBoxStyle.YesNo, "Attention" Affiche une MessageBox avec dans la barre de titre Attention Affiche dans la boite : Continuer lapplication (sur 2 lignes) La boite a 2 boutons : Oui Non Exemple complet : Dim msg As String Dim title As String Dim style As MsgBoxStyle Dim response As MsgBoxResult msg = "Voulez vous continuer?" ' Dfinition du message afficher. style = MsgBoxStyle.DefaultButton2 Or _ MsgBoxStyle.Critical Or MsgBoxStyle.YesNo 'On affiche Oui Non title = "MsgBox Dmonstration" ' Dfinition du titre. ' Affiche la boite MsgBox. response = MsgBox(msg, style, title) If response = MsgBoxResult.Yes Then ' code si lutilisateur cliquer sur Oui Else ' code si lutilisateur cliquer sur No. End If Voila ce que cela donne : ' Lutilisateur a choisi Oui.

Hamid AZZI

28

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

On remarque que dans lexemple, on cre des variables dans lesquelles on met le texte ou les constantes adquates, avant dappeler la fonction MsgBox. InputBox C'st une fonction qui permet douvrir une fentre qui pose une question : Elle retourne la rponse tape par lutilisateur : Le retour est effectu dans une variable String. Dim Nom As String Nom = InputBox("Bonjour","Tapez votre nom ?") Cela donne :

On pourrait rajouter un 3eme argument=la rponse par dfaut. Si lutilisateur clique sur le bouton annuler, une chane vide est retourne. OpenFileDialog Comment afficher une boite de dialogue permettant de slectionner un fichier (ou des fichiers) ouvrir par exemple ? Dans la boite Outils, cliquez sur OpenFileDialog puis cliquez sur la fentre en cours : un contrle OpenFileDialog1 apparat sous le fentre. Ouvre une boite de dialogue permettant de choisir un nom et un chemin de fichier, au programmeur d'crire le code lisant les fichiers. Dans le code lendroit ou doit souvrir la fentre, tapez : OpenFileDialog1.ShowDialog() Cest suffisant pour crer une fentre montrant larborescence des fichiers et rpertoires et pour que l'utilisateur choisisse un fichier, mais le plus souvent on a besoin que la boite de dialogue propose un type de fichier et un rpertoire prcis. Par exemple je veux ouvrir un fichier .TXT dans le rpertoire c:\MesTextes Il faut dans ce cas, AVANT le ShowDialog renseigner certaines proprits du contrle OpenFileDialog1 : With OpenFileDialog1 .Filter="Fichiers txt|*.txt" ' on travaille uniquement sur les .txt 'Sil y a plusieurs filtre les sparer par | .Multiselect=False 'slectionner 1 seul fichier .CheckFileExists=True 'Message si nom de fichier qui n'existe pas. 'Permet d'ouvrir uniquement un fichier qui existe End With

Hamid AZZI

29

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Comment afficher la boite et vrifier si l'utilisateur cliqu sur ouvrir ? If OpenFileDialog1.ShowDialog= DialogResult.Ok Then end if Maintenant, OpenFileDialog1.FileName contient le nom du fichier slectionn (avec extension et chemin) Path.GetFileName(OpenFileDialog1.FileName) donne le nom du fichier sans chemin. SaveFileDialog Boite de dialogue fonctionnant de la mme manire que OpenFileDialog mais avec quelques proprits spcifiques. Ouvre une boite de dialogue permettant l'utilisateur de choisir un nom et un chemin de fichier, au programmeur d'crire le code enregistrant les fichiers. SaveFileDialo1.CreatePrompt= True ' Message de confirmation si 'cration d'un nouveau fichier SaveFileDialo1.OverwritePrompt=True 'Message si le fichier existe dj 'vite l'effacement d'ancienne donnes SaveFileDialo1.DefaultExt="txt" 'extension par dfaut On rcupre aussi dans .FileName le nom du fichier si la proprit .ShowDialog retourn DialogResult.Ok. Il existe aussi : - LoadDialog - PrintDialog

Hamid AZZI

30

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.9 Regroupement de contrlesOn peut regrouper des contrles dans : - Les GroupBox. - Les Panels. - Les PictureBox. - Les TabControl. 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.

GroupBox

Panel avec AutoScroll=True et BorderStyle=Single

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. Les contrles regroups dans un panneau ou un GroupBox sont accessibles au moyen de la proprit Controls du panneau. Le contrle Panel est similaire au contrle GroupBox, mais seul le contrle Panel peut disposer de barres de dfilement et seul le contrle GroupBox peut afficher une lgende. La lgende de la GroupBox est dfinie par la proprit Text. Pour faire apparatre les barres de dfilement dans le Pannel mettre AutoScroll =True et AutoScrollMinSize =100;100 Dans un Panel, pour afficher des barres de dfilement, attribuez la proprit AutoScroll la valeur true.. La proprit BorderStyle dtermine si la zone est entoure d'une bordure invisible (None), d'une simple ligne (FixedSingle) ou d'une ligne ombre (Fixed3D). Comment crer un contrle Panel ? Faites glisser un contrle Panel de l'onglet Windows Forms de la bote outils jusqu' un formulaire. Ajoutez des contrles au panneau en les dposant dans le panneau. Si vous voulez mettre dans le panneau des contrles existants, slectionnez-les tous, coupezles dans le Presse-papiers, slectionnez le contrle Panel et collez-les. 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.

Hamid AZZI

31

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLETabControl

TDI 1 GB 2007/2008

Ce contrle permet de crer des onglets comme dans un classeur, onglets entirement grs par VB. 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.

En mode run les onglets fonctionnent automatiquement: cliquez sur Page 2 affiche la page correspondante (et dclenche l'vnement Click de cet objet TabPage) La proprit Alignment permet de mettre les onglets en haut, en bas, droite, gauche. Evnement commun Exemple : 3 cases cocher permettent de colorer un label en vert rouge ou bleu. Comment grer les vnements ? On peut crire 3 routines compltes pour chaque case cocher. Il est aussi toujours possible dans chacune des 3 procdures CouleurX.checkedChanged de vrifier si la case est coche et de modifier la couleur. C'est plus lgant d'avoir une procdure unique qui, en fonction de la case cocher qui a dclench l'vnement, change la couleur. On dsire donc parfois que l'vnement de plusieurs contrles diffrents soit dirig sur une seule et mme procdure. Mais, la notion de groupe de contrle comme en VB6 n'existe plus!!! Par contre par l'intermdiaire du Handles, il est possible d'associer plusieurs vnements une seule procdure : Private Sub CouleurCheckedChanges (ByVal sender As System.Objet, ByVal e As System.EventArgs) Handles CouleurVert.CheckedChanged, CouleurRouge.CheckedChanged, CouleurBleu.CheckedChanged End Sub Cette procdure est active quand les cases cocher CouleurVert CouleurBleu, CouleurRouge changent d'tat. A noter que Sender est le contrle ayant correspondant. dclench l'vnement et e l'vnement

Pour modifier la couleur il faut ajouter dans la procdure : Select Case sender.Name Case "CouleurRouge" Lbl.BackColor= ..Rouge

Hamid AZZI

32

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

..... Je ne suis pas certain que cela fonctionne, il faut plutt mettre : Select Case sender Case CouleurRouge Enfin la ligne suivante marche ! If sender Is CouleurRouge Then...

Hamid AZZI

33

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.10Positionnons les contrlesOn peut : - Dimensionner les contrles - Les positionner. Tous les contrles hritent donc tous de la classe Windows Forms. Les Windows Forms ont des proprits, que tous les contrles rcuprent : Concernant la taille : On peut utiliser : - Left, Top coordonnes du coin suprieur droit et Bottom, Right infrieur gauche. - Location : coordonnes X, Y du coin suprieur droit du contrle en pixels. - Height, Width pour la hauteur et la largeur du contrle en pixels. - Size : hauteur, largeur peut aussi tre utilis. Exemple : Button.left=188 Button.Top=300 Ou Button.Location= New System.Drawing.Point(188,300) System.Drawing.Point() positionne un point dans lespace.

En mode conception il est bien plus simple de dimensionner les contrles la main dans la fentre Design. Pour le redimensionnement de fentre : Pour que lutilisateur puisse redimensionner la fentre quil a sous les yeux (en cliquant sur les bords) il faut que la proprit FormBorderStyle de la fentre = Sizable. Mais si lutilisateur modifie la taille de la fentre qui contient les contrles, la taille des contrles ne suit pas. (Avant cette version VB.net, il fallait dans lvnement Form_Resize, dclench par la modification des dimensions de la fentre, crire du code modifiant les dimensions et positions des contrles afin quil sadaptent la nouvelle fentre.) En VB.Net cest plus simple grce : Anchor : Permet dancrer les bords. Un bord ancr reste gale distance du bord du conteneur quand le conteneur (la fentre) est redimensionn. En mode conception il suffit de cliquer sur '. . .' en face de Anchor pour voir souvrir une fentre, cliquer sur les bords que vous voulez ancrer. Par dfaut les bord Top (haut) et left(gauche) sont ancrs. Expliquons : Left est ancr, si je dplace le bord droit de la fentre, le contrle nest pas dplac car la distance bord gauche de la fentre et bord gauche du contrle est fixe. Par contre si je dplace le bord gauche de la fentre, le contrle suit.

Hamid AZZI

34

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Exemple : Prenons 2 contrles dans une fentre, celui de gauche avec Anchor left et celui de droite left et right. Si je dplace le bord droit (ou le gauche dailleurs) : le contrle droit est redimensionn, les 2 contrles restent cote cote.

Dock Amarre aux bords. Il y a mme possibilit damarrer aux 4 bords (Fill) pour remplir le conteneur, et de modifier la proprit DockPaddind afin se sloigner lgrement des bords pour faire joli. Spliter Le contrle Splitter servent redimensionner des contrles au moment de l'excution. Le contrle Splitter est utilis dans les applications dont les contrles prsentent des donnes de longueurs variables, comme l'Explorateur Windows. Pour permettre un utilisateur de redimensionner un contrle ancr au moment de l'excution, ancrez le contrle redimensionner au bord d'un conteneur, puis ancrez un contrle Splitter sur le mme ct de ce conteneur.

Hamid AZZI

35

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.11MainMenu et ContextMenuMainMenu : On peut ajouter un menu dans une fentre. Beaucoup dapplications contiennent un menu. Exemple de menu : Fichier Ouvrir Fermer Imprimer Quitter Edition Couper Copier Coller ... On remarque que le contenu des menus est standardis afin que lutilisateur sy retrouve sans aide (Lutilisateur lit, mon avis, rarement les aides !!!) Comment crer un menu ? En allant dans la boite outils, chercher un main menu et en le dposant sur la fentre : il apparat en dessous de la fentre. Pour dessiner le menu, il suffit de mettre le curseur sur le menu en haut de la fentre, ou est crit Taper ici, cet endroit tapez le texte du menu, Fichier par exemple.

Il apparat automatiquement un Tapez Ici pour les lignes dessous ou le menu suivant. Les lignes du menu sont nommes automatiquement MenuItem1, MenuItem2 Quand le curseur est sur une ligne du menu, la fentre de proprit donne les proprits de la ligne : La proprit ShortKey permet de crer un raccourci. La proprit Checked permet de cochez la ligne La proprit Visible permet de faire apparatre ou non une ligne. Si vous double-cliquez sur la ligne du menu vous voyez apparatre : Private Sub MenuItem1_Click(ByVal sender As System.Object, System.EventArgs) Handles MenuItem1.Click End Sub Cest la procdure vnement lie la ligne du menu. Quand lutilisateur clique sur une ligne du menu cest le code contenu dans cette procdure qui est effectu. ByVal e As

Hamid AZZI

36

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEContextMenu :

TDI 1 GB 2007/2008

C'est un menu qui s'ouvre quand, sur un objet, on clique sur le bouton droit de la souris. En allant dans la boite outils, chercher un Context menu, on le dpose sur la fentre, il apparat en dessous de la fentre. Si on le slectionne avec la souris, il apparat en haut et comme pour le menu principal, on peut ajouter des lignes. Il faut ensuite affecter ce Context Menu un contrle, pour cela donner la proprit ContextMenu du contrle le nom du ContextMenu. TextBox1.ContextMenu = ContextMenu1 Si vous double-cliquez sur une ligne du menu vous voyez apparatre les procdures vnement correspondantes.

Hamid AZZI

37

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.12Avoir le FocusNous allons tudier comment un objet de l'interface devient actif. Lorsqu'une fentre ou un contrle est actif on dit qu'il a le focus. Si une fentre prend le focus, sa barre de titre en haut prend la couleur active, si c'est un contrle texte, le curseur apparat dedans. Comment donner le focus une fentre ? Si une fentre est visible la mthode Activate lui donne le focus. Form1.Activate() Dans ce cas l'vnement Form1_Activated survient. La mthode Desactivate est dclenche quand la fentre perd le focus. Comment donner le focus un contrle ? Avec la mthode Focus TxtNom.Focus() Avec la mthode Select : TxtNom.Select() 'donne le focus la zone de texte Txnom et met le curseur dedans. On peut la surcharger et en plus slectionner une portion du texte : TxtNom.Select(2,3) 'donne le focus et slectionne 3 caractres partir du second. Ou forcer ne rien slectionner (second argument 0). On peut interdire un contrle le focus en donnant la valeur False sa proprit CanFocus. Aussi avant de donner le focus il est prfrable de vrifier s'il peut le prendre : If TxtNom.CanFocus then TxtNom.Focus() End If L'vnement GotFocus se produit quand le contrle prend le focus. Private Sub TxtNom_GotFocus.. End Sub Cascade dvnement quand on prend ou on perde le focus Enter Se produit quand l'utilisateur entre dans le contrle. GotFocus Se produit quand le contrle prend le focus. Leave Se produit quand le focus quitte le contrle. Validating Se produit lorsque le contrle est en cours de validation. La validation c'est vous qui devez la faire!!! Pour un bouton par exemple se produit lorsque l'on quitte le bouton, cela permet de contrler la validit de certaines donnes et si ncessaire d'interdire de quitter le contrle si certaines

Hamid AZZI

38

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

conditions ne sont pas remplies : Private Sub Button1_Validating ((ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Button1.Validating If condition then e.Cancel = True 'Annuler la perte du focus End If End Sub Validated Se produit lorsque le contrle termin sa validation LostFocus L'vnement LostFocus se produit quand le contrle perd le focus. Si la proprit CauseValidating du contrle a la valeur false, les vnements Validating et Validated sont supprims. Les vnements Enter et Leave sont supprims dans les formulaires (fentres). Les vnements quivalents dans la classe Form sont les vnements Activated et Desactivate. Certains contrles ne peuvent pas avoir le focus, comme les labels par exemple. Usage du clavier pour passer dun contrle lautre Dans une application ou un utilisateur saisi beaucoup de donnes dans de multiples contrles, il passe souvent d'un contrle (TextBox par exemple) au suivant avec la touche TAB.

|

Comment permettre cela ? Chaque contrle une proprit TabIndex qui s'incrmente automatiquement de 0 1, 2, 3...quand on ajoute des contrles sur une fentre. Lorsque l'utilisateur appuie sur TAB, le focus passe au contrle qui a le TabIndex immdiatement suprieur. On peut modifier le TabIndex des contrles pour modifier l'ordre de tabulation. Quand TabStop a la proprit False (au niveau d'un contrle) celui ci est exclu de l'ordre de tabulation et le focus ne s'arrte pas. Raccourcis clavier Dans beaucoup d'applications certains contrles ont un raccourci clavier : Exemple : Nouveau est une ligne de menu. N tant soulign, ALT-N dclenche la ligne de menu, donne le focus au contrle. Comment faire cela : Dans la proprit Text du contrle, quand on tape le texte en mode conception, il faut mettre un '&' avant la lettre qui servira de raccourci clavier. '&Nouveau' dans notre exemple donnera bien Nouveau et ALT N fonctionnera. Pour une TextBox, la proprit text ne peut pas tre utilise, aussi il faut mettre devant la textBox un contrle label (qui lui ne peut pas avoir le focus), si le TabIndex du label et du

Hamid AZZI

39

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

TextBox se suivent, le fait de faire le raccourci clavier du label donnera le focus au TextBox. Nom | Exemple quand l'utilisateur tapera Alt-N, le focus ira dans le TextBox dessous.

Hamid AZZI

40

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.13ToolBar et StatusBarComment mettre une barre de bouton en haut et une barre d'tat en bas? La barre de bouton Voici un exemple classique, sous le menu il y a une barre de bouton: Nouveau, Ouvrir, Enregistrer, Chercher, Imprimer...

Aller chercher dans la boite outils un contrle ToolBar, il se place en haut, sous le menu. Mettre aussi un ImageList. (Un contrle ImageList est un contrle qui stocke des images, chaque image tant chargs en mode conception et repres par un numro (0, 1, 2, 3...) Dans les proprits du ToolBar mettre dans la proprit ImageList le nom du contrle ImageList qui contient les images des boutons. Ouvrir la collection Buttons dans la fentre des proprits de la ToolBar pour pouvoir ajouter ou modifier les boutons :

Vous pouvez ajouter ou enlever des boutons. Chaque bouton a ses proprits affiches droite : - Name Nom du Bouton. Exemple : NewButton. - ImageIndex donne le numro de l'image (contenue dans l'imagelist) qui doit s'afficher dans le bouton. - ToolTipText donne le texte du ToolTip (Carr d'aide qui apparat quand on est sur le bouton) Il faut aussi que la proprit ShowToolTip de la ToolBar soit True L'vnement dclench par le click de l'utilisateur sur un bouton est : ToolBar1_ButtonClick L'argument e contient les arguments de l'vnement click de la ToolBar. e.Button contient le nom du bouton qui a dclench l'vnement. Pour chaque nom de bouton on appellera la procdure correspondante: NewDoc(), Open()...

Hamid AZZI

41

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Comme d'habitude il suffit de double-cliquer sur la ToolBar pour faire apparatre ToolBar1_ButtonClick Voici le code complet : Private Sub ToolBar1_ButtonClick(ByVal Sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles toolBar1.ButtonClick If e.Button Is NewButton Then NewDoc() ElseIf e.Button Is OpenButton Then Open() ElseIf e.Button Is SaveButton Then Save() ElseIf e.Button Is PreviewButton Then PrintPreview() ... End If End Sub Contrle StatusBar La barre d'tat se trouve en bas de la fentre et affiche des informations relatives aux oprations en cours.

Dans la fentre des proprits du StatusBar, la collection Panels contient les zones d'affichage du StatusBar. Dans le code, pour modifier le texte d'une zone faire : StatusBar1.Panels(0).Text="1715.2F"

Hamid AZZI

42

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.14Les ImagesComment afficher des images ? Le contrle PictureBox Le contrle PictureBox sert afficher des graphismes au format bitmap, GIF, JPEG, mtafichier ou icne (Extension .BMP .GIF .JPG .WMF .ICO) L'image affiche est dtermine par la proprit Image, laquelle peut tre dfinie au moment de l'excution ou du design. La proprit SizeMode dtermine la faon dont l'image et le contrle se dimensionnent l'un par rapport l'autre.

On peut charger une image en mode conception ou dans le code : PictureBox1.Image = Image.FromFile("vimage.gif) (L'objet de la Classe Image charge une image d'un fichier puis l'affecte la proprit Image.) ou par PictureBox1.Image.FromFile("vcar1.gif") cette syntaxe ne marche pas!!!Pourquoi? Ho! Merveille, les GIF anims sont acceptes et s'animent sous VB. Comment effacer une image? If Not (PictureBox1.Image Is Nothing) Then PictureBox1.Image.Dispose() PictureBox1.Image = Nothing End If Les objets de la Classe Image ont comme d'habitude des proprits et des mthodes. La mthode RotateFlip permet par exemple d'effectuer une rotation de l'image, quand on tape le code, VB donne automatiquement la liste des paramtres possible. PictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipX) La mthode Save sauvegarde l'image dans un fichier. PictureBox1.Image.Save("c:\image.bmp") Noter bien que le nom de l'extension suffit imposer le format de l'image. On peut charger une image .GIF puis la sauvegarder en .BMP Il y a bien d'autres proprits grant les dimensions, la palette de l'image.

La proprit Image des contrles : De nombreux contrles Windows Forms peuvent afficher des images. L'image affiche peut tre une icne symbolisant la fonction du contrle ou une image ; par exemple, l'image d'une disquette sur un bouton indique gnralement une commande d'enregistrement. L'icne peut galement tre une image d'arrire-plan confrant au contrle une certaine apparence. Pour tous les contrles affichant des images, l'image peut tre dfinie l'aide des proprits Image ou BackgroundImage.

Hamid AZZI

43

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Pour affecter la proprit Image ou BackgroundImage un objet de type System.Drawing.Image en gnral, vous utiliserez la mthode FromFile de la classe Image pour charger une Image partir d'un fichier.

Exemple pour un bouton: button1.Image = Image.FromFile("C:\Graphics\MyBitmap.bmp") ' Aligne l'image. button1.ImageAlign = ContentAlignment.MiddleRight Exemple pour un label: Dim Label1 As New Label() Dim Image1 As Image Image1 = Image.FromFile("c:\\MyImage.bmp") ' modifier la taille du label pour qu'il affiche l'image. Label1.Size = Image1.Size ' Mettre l'image dans le label. Label1.Image = Image1 Si on renseigne la proprit Image, on ne peut pas utiliser en mme temps la proprit ImageList dcrite ci-dessous.

Le contrle ImageList Il sert de containeur image, c'est une collection d'images. les images qu'il contient seront utilises par d'autres contrles (PictureBox, Listview, TreeView, Button....) Il n'est pas visible en excution. En conception il apparat en bas sous la fentre. A droite figurent ses proprits, en particulier, la collection Images qui contient les images et la proprit TransparentColor qui indique la couleur qui doit tre transparent, c'est dire non visible.

Hamid AZZI

44

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Si je clique sur le bouton en face de Images, l'diteur de collections d'image s'ouvre.

On peut ajouter des images avec le bouton 'Ajouter'. L'ImageList est ainsi charge. Ensuite pour utiliser une image de l'ImageList dans un autre contrle, il faut modifier les proprits de cet autre contrle (un bouton par exemple). La proprit ImageList du bouton doit contenir le nom du contrle imageList et ImageIndex du bouton doit contenir l'index de l'image dans l'imageList. btOk.ImageList = imagelist1 btOk.ImageIndex = 2 Un ImageList peut aussi tre charge par code : imageList1.Images.Add(Image.FromFile(NomImage)) On ajoute la collection Images une image venant d'un fichier nomm NomImage. On peut surcharg la mthode Add en fournissant en plus la couleur transparente. imageList1.Images.Add(Image.FromFile(imageToLoad), CouleurTransparente) La taille des images peut aussi tre modifie par code : imageList1.ImageSize = New Size(255, 255) imageList1.TransparentColor = Color.White

Hamid AZZI

45

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Rsumons Rvision pour y voir plus clair3.30 Calcul de lIMC, Rvision++ Structuration des programmes Ce chapitre permet de 'rviser' pas mal de notions. Quest ce que lIMC ? L'index de masse corporelle est trs utilis par les mdecins. Il est calcul partir du poids et de la taille : IMC=Poids/Taille au carr (avec Poids en Kg, Taille en mtres) Cela permet de savoir si le sujet est : - maigre (IMC25) - obse (IMC>30). On peut calculer le poids idal par exemple PI= 22* T*T Nous allons dtailler ce petit programme : Quel est le cahier des charges du programme ? L'utilisateur doit pouvoir : Saisir un poids, une taille, cliquer sur un bouton 'Calculer' Les routines doivent : Vrifier que l'utilisateur ne fait pas n'importe quoi. Calculer et afficher les rsultats : l'IMC mais aussi, en fonction de la taille, le poids idal, les poids limites de maigreur, surpoids, obsit. Cration de linterface Il faut 2 zones de saisie pour saisir le poids et la taille : On cre 2 'TextBox' que l'on nomme : - TexBoxPoids - TextBoxTaille (On laisse la proprit Multiline False ) pour n'avoir qu'une zone de saisie. Pour afficher les rsultats, on cre 5 'label' que l'on met les uns sous les autres. (Pour aller plus vite et que les labels fassent la mme taille, on en cre un puis par un copier et des coller, on cre les autres) : - labelImc 'pour afficher l'Imc - labelPi 'pour afficher le poids idal - labelM 'pour afficher le poids limite de la maigreur. - labelS 'pour afficher le poids limite du surpoids - labelO 'pour afficher le poids limite de l'obsit.

Hamid AZZI

46

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Ensuite on ajoute des labels devant et derrire chaque TextBox et label pour indiquer devant, ce qu'ils contiennent et derrire, l'unit. On ajoute 2 boutons : - ButtonCalcul - ButtonQuitter Cela donne :

Pour faire beau : La proprit Text de la fentre contient "Calcul IMC", pour afficher cela dans la barre de titre. La proprit ForeColor de labelImc est en rouge. La proprit BorderStyle des labels a la valeur 'Fixed3d' ce qui rend les bords visibles. Ajout du Code La procdure vnement Form1_Load qui s'effectue lorsque la fentre se charge initialise les zones d'affichage en les vidant : Private Sub Form1_Load(..) TextBoxTaille.Text = "" TextBoxPoids.Text = "" LabelImc.Text = "" LabelPi.Text = "" LabelM.Text = "" LabelS.Text = "" LabelO.Text = "" End Sub La procdure ButtonCalcul_Click qui se dclenche lorsque l'utilisateur clique sur le bouton 'Calculer' contient le code principal. Voici la totalit du code, on le dtaillera dessous. Private Sub ButtonCalcul_Click(..) Dim sPoids As Single 'Variable Single contenant le poids Dim sTaille As Single 'Variable Single contenant la taille

Hamid AZZI

47

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE'******Controle de validit des entres************ 'Les valeurs saisies sont-elles numrique? If Not (IsNumeric(TextBoxTaille.Text)) Then MsgBox("Entrez une valeur numrique pour la taille") Exit Sub End If If Not (IsNumeric(TextBoxPoids.Text)) Then MsgBox("Entrez une valeur numrique pour le poids") Exit Sub End If 'Convertir les textes saisies en single ' et les mettre dans les variables sTaille = CType(TextBoxTaille.Text, Single) / 100 sPoids = CType(TextBoxPoids.Text, Single) 'Les valeurs saisies sont-elles cohrentes? If sTaille < 50 Or sTaille > 250 Then MsgBox("Entrez une taille valide") Exit Sub End If If sPoids < 20 Or sPoids > 200 Then MsgBox("Entrez un poids valide") Exit Sub End If

TDI 1 GB 2007/2008

'Effectuer les calculs et afficher les rsultats. LabelImc.Text = (Math.Round(sPoids / (sTaille * sTaille), 2)).ToString LabelPi.Text = (Math.Round(22 * (sTaille * sTaille), 2)).ToString LabelM.Text = (Math.Round(18.5 * (sTaille * sTaille), 2)).ToString LabelS.Text = (Math.Round(25 * (sTaille * sTaille), 2)).ToString LabelO.Text = (Math.Round(30 * (sTaille * sTaille), 2)).ToString End Sub Dtaillons : Quelles sont les diffrentes tapes ? - On dclare les variables. - On vrifie que ce qui a t tap est numrique. - On convertit le texte qui est dans la TextBox en Single - On teste si les valeurs de poids et taille sont cohrentes. - On fait le calcul et on affiche. Dclaration de variables. Dim sPoids As Single 'Variable Single contenant le poids Dim sTaille As Single 'Variable Single contenant la taille Ce sont des variables 'prives' propres la procdure (utilisation de Dim ou Private). Contrle de validit : L'utilisateur est sens avoir tap un poids et une taille puis cliqu sur le bouton 'Calculer'. Mais il ne faut absolument pas lui faire confiance : il a peut-tre oubli de taper le poids ou a donner une taille=0 (l'ordinateur n'aime pas diviser par 0!!), il a peut-tre fait une faute de frappe et tap du texte!!... Donc il faut tester ce qui a t tap, s'il y a erreur, on prvient l'utilisateur avec une 'MessageBox' puis on sort de la routine par (Exit Sub) sans effectuer de calculs.

Hamid AZZI

48

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Ici par exemple, on teste si le texte saisi dans la zone taille n'est pas numrique : If Not (IsNumeric(TextBoxTaille.Text)) Then MsgBox("Entrez une valeur numrique pour la taille") Exit Sub End If Amlioration : On aurait pu automatiquement effacer la valeur errone et placer le curseur dans la zone ressaisir : If Not (IsNumeric(TextBoxTaille.Text)) Then MsgBox("Entrez une valeur numrique pour la taille") TextBoxTaille.Text="" TextBoxTaille.Select() Exit Sub End If Conversion : Si le texte est bien 'Numric', on fait la conversion en rel simple prcision (Single) sTaille = CType(TextBoxTaille.Text, Single) / 100 On utilise CType pour convertir une String en Single. On divise taille par 100 car l'utilisateur saisie la taille en centimtres et les formules ncessite une taille en mtres. Problme du sparateur dcimal dans les saisies. Pourquoi saisir la taille en Cm? Cest pour viter d'avoir grer le problme du sparateur dcimal si la taille est saisie en mtres: L'utilisateur va t-il taper "1.75" ou "1,75" si je lui demande des mtres. On rappelle que pour convertir un texte en Single VB accepte le point et pas la virgule. Pour ma part voici ma solution : si je demandais des mtres j'ajouterais en dbut de routine une instruction transformant les ',' en '.' : TextBoxTaille.Text = Replace(TextBoxTaille.Text, ",", ".") Faire les calculs et afficher les rsultats. Je fais le calcul: sPoids / (sTaille * sTaille) J'arrondis 2 dcimales aprs la virgule grce Math.Round( ,2): Math.Round(sPoids / (sTaille * sTaille), 2) Je convertis en String: (Math.Round(sPoids / (sTaille * sTaille), 2)).ToString J'affiche dans le label 'labelImc': LabelImc.Text = (Math.Round(sPoids / (sTaille * sTaille), 2)).ToString (J'aurais pu aussi ne pas arrondir le calcul mais formater l'affichage pour que 2 dcimales soient affiches) La procdure ButtonQuitter_Click dclenche quand l'utilisateur clique sur le bouton 'Quitter' ferme la seule fentre du projet (c'est Me , celle ou on se trouve), ce qui arrte le programme. Private Sub ButtonQuitter_Click() Me.Close() End Sub

Hamid AZZI

49

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEStructuration Ici on a fait simple : une procdure vnement calcul et affiche les rsultats. On aurait pu, dans un but didactique 'structurer' le programme. On aurait pu dcouper le programme en procdure : - Une procdure faisant le calcul. - Une procdure affichant les rsultats. Pour les variables il y a dans ce cas 2 possibilits : - Mettre les variables en 'Public' dans un module Standard. - Utiliser des variables prives et les passer en paramtres.

TDI 1 GB 2007/2008

Premire solution : Variables Public Crer dans un module standard des variables Public pour stocker les variables Poids et Taille, rsultats (Public sIMC A Single par exemple), crer dans ce mme module standard une procdure Public nomme 'Calculer' qui fait les calculs et met les rsultats dans les variables public, enfin dans le module de formulaire crer une procdure 'AfficheResultat' affichant les rsultats. Module standard : 'Dclaration de variables Public Public sPoids As Single Public sTaille As Single Public sIMC A Single .. 'Procedure Public de calcul Public Sub Calculer sIMC=Math.Round(sPoids / (sTaille * sTaille), 2) ... End Sub Module de formulaire Form1 : 'Procdure vnement qui appelle les divers routines Private Sub ButtonCalculer_Click ... sTaille = CType(TextBoxTaille.Text, Single) / 100 Calculer() 'Appelle la routine de calcul AfficheResultat() 'Appelle la routine d'affichage End Sub 'routine d'affichage Private Sub AfficheResultat() LabelImc.Text = sIMC.ToString ... End Sub On voit bien que la routine de Calcul est gnrale et donc mise dans un module standard et d'accs 'Public', alors que la routine d'affichage affichant sur Form1 est prive et dans le module du formulaire. Seconde solution : Variables Prives et passage de paramtres On aurait pu ne pas crer de variables 'public' mais crer des fonctions (CalculIMC par exemple) qui on enverrait en paramtre le poids et la taille et qui retournerait le rsultat du calcul. Une procdure AfficheResultatIMC recevrait en paramtres la valeur de l'IMC afficher. Module standard :

Hamid AZZI

50

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE'Pas de dclaration de variables Public .. 'Function Public de calcul: reoit en paramtre le poids et la taille 'retourne l'Imc Public Function CalculerIMC (T as Single, P As Single) As Single Return Math.Round(P / (T*T), 2) End Sub Module de formulaire Form1 : 'Procdure vnement qui appelle les divers routines Private Sub ButtonCalculer_Click ... sTaille = CType(TextBoxTaille.Text, Single) / 100

TDI 1 GB 2007/2008

'Appelle de la routine calcul avec l'envoie de paramtres sPoids et sTaille 'Au retour on a la valeur de L'imc que l'on envoie la routine d'affichage. AfficheResultatIMC(CalculerIMC(sTaille, sPoids)) 'Appelle la routine d'affichage End Sub 'routine d'affichage Private Sub AfficheResultatIMC(I As Single) LabelImc.Text = i.ToString End Sub Remarque : La ligne AfficheResultatIMC(CalculerIMC(sTaille, sPoids)) est quivalente : Dim s As single s=(CalculerIMC(sTaille, sPoids) AfficheResultatIMC(s)) mais on se passe d'une variable temporaire. Conclusion : Faut-il travailler avec des variables Public ou passer des paramtres ? Rponses : A mon avis, les 2 et "a dpend"!!!(Bien la rponse). Et votre avis ?

Hamid AZZI

51

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

3.31Ordre des instructionsDans quel ordre crire dans un module. Contenu des modules Le code Visual Basic est stock dans des modules (modules de formulaires, module de classe ...), chaque module est dans un fichier ayant l'extension '.vb". Les projets sont composs de fichiers, lesquels sont compils pour crer des applications. Respecter l'ordre suivant : 1. Instructions Option toujours en premier (force des contraintes de dclaration de variables, de conversion de variables, de comparaison). 2. Instructions Imports (charge des espaces de noms) 3. Procdure Main (la procdure de dmarrage si ncessaire) 4. Instructions Class, Module et Namespace, le cas chant Exemple : Option Explicit On Imports System.AppDomain Imports Microsoft.VisualBasic.Conversion Public Class Form1 Inherits System.Windows.Forms.Form Dim WithEvents m As PrintDocument1 #Region " Code gnr par le Concepteur Windows Form " Public d As Integer Private Sub Form1_Load(ByVal System.EventArgs) Handles End Sub Dim A As integer End Class sender As System.Object, ByVal e As

On remarque de nouveau l'importance de l'endroit ou les variables sont dclares : Dans notre exemple A est accessible uniquement dans Form_Load, alors que d est public. Si vous entrez les instructions dans un ordre diffrent, vous risquez de crer des erreurs de compilation.

Hamid AZZI

52

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

Exemple de petits programmesE 3.1 Exemples : Conversion Francs/Euros Comment crer un programme de conversion Francs=>Euros et Euros=> Francs ? Euros 2 Francs: 13.12 Il y a une zone de saisie Euros, une zone Francs, si je tape dans la zone Euros '2' il s'affiche '13.12' dans la zone Francs, cela fonctionne aussi dans le sens Francs=>Euros. Comment faire cela? Un formulaire affichera les zones de saisie, un module standard contiendra les procdures de conversion. On cre un formulaire contenant : - 2 TextBox BoiteF et BoiteE, leurs proprits Text="" - 2 labels dont la proprit Text sera ="Euros" et "Francs", on les positionnera comme ci-dessus. Dans le formulaire, je dimensionne un flag (ou drapeau) : flagAffiche, il sera donc visible dans la totalit du formulaire. Je l'initialise True. Public Class Form1 Inherits System.Windows.Forms.Form Dim flagAffiche As Boolean = True Comme la conversion doit se dclencher automatiquement lorsque le texte de BoiteF ou BoiteE change, j'utilise les vnements 'TextChanged' de ces TextBox. Pour la conversion Euros=>Francs, dans la procdure TextChanged de BoiteE, je rcupre le texte tap (BoiteE.Text), j'appelle la fonction ConversionEF en lui envoyant comme paramtre ce texte. La fonction me retourne un double que je transforme en string et que j'affiche dans l'autre TextBox(BoiteF). Private Sub BoiteE_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BoiteE.TextChanged If flagAffiche = True Then flagAffiche = False BoiteF.Text = (ConversionEF(BoiteE.Text)).ToString flagAffiche = True End If End Sub Idem pour l'autre TextBox : Private Sub BoiteF_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles BoiteF.TextChanged If flagAffiche = True Then flagAffiche = False BoiteE.Text = (ConversionFE(BoiteF.Text)).ToString flagAffiche = True End If End Sub

Hamid AZZI

53

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEEnd Class

TDI 1 GB 2007/2008

Hamid AZZI

54

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLE

TDI 1 GB 2007/2008

A quoi sert le flag : flagAffiche? A viter une boucle sans fin, sans flag, BoiteF_TextChanged modifie BoiteE_Text qui dclenche BoiteE_TextChanged qui modifie BoiteF_Text qui dclenche BoiteF_TextChanged... Avec le flag, quand je vais modifier la proprit Text d'une TextBox, le met le flag False, cela indique l'autre vnement TextChanged de ne pas lui aussi convertir et afficher. Enfin il faut crire les procdures qui font la conversion : ConversionEF et ConversionFE dans un module standard. Ces procdures 'Function' appellent elles mmes une autre fonction qui arrondi les rsultats 2 dcimales. Pour transformer des Euros en Francs, je les multiplie par 6.55957 puis j'arrondis. On remarque que ces procdures reoivent une string en paramtres et retourne un double. Module Module1 Public Function ConversionEF(ByVal e As String) As Double Dim somme As Double Dim resultat As Double somme = Val(e) resultat = Arrondir(somme * 6.55957) Return resultat End Function Public Function ConversionFE(ByVal e As String) As Double Dim somme As Double Dim resultat As Double somme = Val(e) resultat = Arrondir(somme / 6.55957) Return resultat End Function Enfin la Function Arrondir arrondit 2 dcimales: pour cela on multiplie par 100, on arrondit l'entier avec Round puis on divise par 100. Public Function Arrondir(ByVal Valeur As Double) As Double 'arrondi a 2 chiffres aprs la virgule Return (Math.Round(Valeur * 100)) / 100 End Function End Module A noter que l'on aurait pu utiliser une surcharge de Round qui arrondit directement 2 dcimales : Return (Math.Round(Valeur, 2)) Exercice: Quel code mettre dans la procdure Button_Click d'un bouton nomm 'Remise zro' qui met les 2 zones de saisie zro ? (Pensez au flag)

Hamid AZZI

55

CFHN RABAT

M11 PROGRAMMATION EVENEMENTIELLEE 3.2 Exemple : Mensualits dun prt Comment crer un programme qui calcul les mensualits d'un prt ? Dans l'espace Microsoft.VisualBasic il existe des fonctions financires. Pmt calcul les mensualits d'un prt. Remboursement mensuel= Pmt( Rate, NPer, PV, FV, Due) Rate

TDI 1 GB 2007/2008

Obligatoire. Donne de type Double indiquant le taux d'intrt par priode. Si taux d'intrt annuel de 10 pour cent et si vous effectuez des remboursements mensuels, le taux par chance est de 0,1/12, soit 0,0083. Obligatoire. Donne de type Double indiquant le nombre total d'chances. Par exemple, si vous effectuez des remboursements mensuels dans le cadre d'un emprunt de quatre ans, il y a 4 * 12 (soit 48) chances. Obligatoire. Double indiquant la valeur actuelle. Par exemple, lorsque vous empruntez de l'argent pour acheter une voiture, le montant du prt correspond la valeur actuelle (pour un emprunts il est ngatif). Facultatif. Double indiquant la valeur future ou le solde en liquide souhait au terme du dernier remboursement. Par exemple, la valeur future d'un emprunt est de 0 F car il s'agit de sa valeur aprs le dernier remboursement. Par contre, si vous souhaitez conomiser 70 000 F sur 15 ans, ce montant constitue la va