Accueil
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi Eclipse MS-Office SQL & SGBD Oracle  4D  Business Intelligence

Cours VB.NET

Date de mise à jour : 05/12/2010


VIII-A. Différentes interfaces utilisateur: Console, Windows Forms, WPF.
VIII-B. Interface utilisateur Windows Forms et 'Control'
VIII-B-1. En pratique, comment créer l'interface utilisateur ?
VIII-B-2. La Classe 'Control'
VIII-B-3. Évènements liés aux objets avec représentation visuelle
VIII-B-4. En résumé
VIII-C. Les fenêtres ou 'Formulaires'
VIII-C-1. Créer une fenêtre en mode conception
VIII-C-2. Propriétés
VIII-C-3. Ouvrir un formulaire
VIII-C-4. Fermer un formulaire
VIII-C-5. Évènements
VIII-C-6. Méthodes
VIII-C-7. Form et code généré par vb
VIII-C-8. Formulaire d'avant plan, Barre de tache.
VIII-C-9. Formulaire non rectangulaire


VIII-A. Différentes interfaces utilisateur: Console, Windows Forms, WPF.

L'interface utilisateur (UI) ou interface homme-machine est la partie du programme qui permet à l'utilisateur du logiciel de communiquer avec le programme.

Où est-il possible de saisir des données au clavier, où seront affichés les résultats ? Quand on crée une application VB, on a le choix:

- Faire une application purement 'Console':Saisir et afficher sur la console qui est une simple fenêtre de type DOS. Cette méthode utilisant la console, est peu évoluée, archaïque. Pour une Application Console: Menu 'Projet'-> 'Propriétés de ...' Combo 'Type de sortie' :Application Console. Dans ce cas la console correspond à une fenêtre type DOS. Et là, on peut entrer des infos à partir du clavier, modifier les couleurs, la position du curseur... On peut écrire du texte sur la console.


Voici un programme purement 'Console'

Module Module1

    Sub Main()
        Console.SetWindowSize(65, 35) 'Dimension de la fenêtre
        Console.Title = "test"        'Titre 
        Console.BackgroundColor = ConsoleColor.Blue'Couleur du fond
        Console.Clear()  'Applique la couleur du fond
        Console.ForegroundColor = ConsoleColor.Red 'Couleur du texte
        Console.SetCursorPosition(10, 20) 'Position du curseur
        Console.Write("Tapez un texte") 'ecrire sur la console
        Dim ligne As String = Console.In.ReadLine() 'récupérer le texte tapé, le mettre dans 'ligne'
        Console.Beep  'emettre un Beep
        Console.Beep(800, 1000) 'emettre un son de 800Herz pendant 1000 MilliSecondes
        Console.Read()      'lire à partir de la console
        'Cela permet de figer la fenêtre (sinon elle s'efface instantanément) 
        'et de lire jusqu'à ce qu'on tape une touche
    End Sub

End Module

- Faire une application 'WindowsForms': Créer des fenêtres (ou formulaires Windows Forms ) basés sur GDI, y mettre des boutons, des textbox... pour saisir et afficher. C'est l'interface habituelle des programmes Windows, nous l'étudierons en détail dans les chapitre "Windows Forms' et suivant. Une application Windows (option par défaut), c'est celle que nous utiliserons dans le reste du cours. Menu 'Projet'-> 'Propriétés de ...' Combo 'Type de sortie' :Application Windows. On utilise des fenêtres Windows: pour créer l'application.

Dans le cas des Windows Forms, en plus on peut aussi écrire sur la 'console'. La console correspond à la fenêtre de 'Sortie': Menu Affichage>Autres fenêtres>Sortie(Ctrl Alt O). On utilise habituellement cette fenêtre de sortie pour le mise au point et pour afficher des informations de débogage.
Mais là, on ne peut qu'écrire sur la console:

Console.write (A+1)

3- A partir de Visual Basic 2008, on peut aussi utiliser les WPF.

WPF utilise lui un moteur de rendu vectoriel et des accélérations matériels (Direct X) pour afficher. Cela permet d'afficher de la 2D, de la 3D, des animations, de plus l'affichage étant vectoriel, il n'y a pas de dépendance avec les dimensions de l'écran. Mais c'est un peu complexe pour les débutants.


4- Programme sans interface.

Rarement, on n'a pas besoin d'interface, on lance un programme qui effectue une tache puis se ferme sans avoir besoin de recevoir ou de donner des informations à l'utilisateur. C'est possible en VB.


VIII-B. Interface utilisateur Windows Forms et 'Control'

L'interface utilisateur (IU) correspond aux fenêtres et contrôles que voit l'utilisateur .

Elle assure le dialogue entre l'homme et la machine. C'est l'Interface Homme Machine (IHM) . Sous Windows, c'est l'interface graphique.


VIII-B-1. En pratique, comment créer l'interface utilisateur ?

On a vu que le développeur dessine cette interface en mode conception (Design) dans l'IDE (Environnement de développement):

Exemple:

On crée une interface utilisateur avec une fenêtre, un bouton, un label (affichant du texte).

Quand on crée un nouveau projet, il y a création d'un Form1 automatiquement.

Comment rajouter une fenêtre?

Menu Projet, Ajouter un formulaire Windows, cliquer sur WindowsForm, une fenêtre 'Form1' apparaît. On a bien crée une fenêtre avec la classe WindowsForms.Form (En fait on a crée une Classe 'Form1', on verra cela plus loin.)

Comment ajouter un bouton?

Cliquer sur 'Boite à Outils' à gauche , bouton WindowsForms, puis bouton 'Button',cliquer dans Form1, déplacer le curseur sans lâcher le bouton, puis lâcher le bouton : un bouton apparaît.

Comment ajouter un label?

Un label est un contrôle qui permet d'afficher un texte.

Comme pour le bouton cliquer sur 'Boite à Outils' à gauche, bouton WindowsForms, bouton 'Label' et mettre un contrôle label sur la fenêtre.

On obtient dans la fenêtre principale:

Modifier les propriétés des l'objets (Bouton, label..) en mode Design.

Il suffit ensuite de modifier les propriétés de l'objet pointé (celui qui est entouré de petits carrés) pour lui donner l'aspect désiré. Les propriétés sont accessibles dans la fenêtre de propriétés de droite.

Noter que pour modifier la taille des objets, on peut le faire très facilement à la souris en cliquant sur les petits carrés entourant l'objet et en tirant les bords. (on peut interdire les modifications de taille et de position des contrôles par le menu Format puis verrouiller les contrôles une fois que leurs tailles et positions est bien définies.)


Modifier les propriétés des l'objets (Bouton, label..) par code.

Dans le code des procédures les propriétés des objets sont aussi accessibles.

Button1.Text="OK"   'Permet par exemple de modifier la propriété Text d'un bouton.


VIII-B-2. La Classe 'Control'

Les contrôles dit visuels (Button, TextBox ListBox...) héritent tous de la classe Control qui hérite elle-même de la classe System.WindowsForms.

Autrement dit, les Button, Label, TextBox... sont des 'Control'.

Tous ces objets ont des propriétés communes héritées de la classe Control.

Nous allons voir les plus utilisées:

Name : il s'agit du nom de l'objet tel qu'il est géré par l'application.

Par défaut, VB baptise tous les objets que vous créez de noms génériques, comme Form1, Form2, Form3 pour les fenêtres, List1, List2 pour les listes...

Cette propriété est accessible en mode conception uniquement.

info Il est vivement conseillé de renommer les objets que vous venez de créer afin de donner des noms plus évocateurs.
Le bouton sur lequel est écrit « OK » sera nommé BoutonOK ou ButtonOk if you are anglophile.

La liste qui affiche les utilisateurs sera nommée ListUtilisateurs.

Il est conseillé de débuter le nom de l'objet par un mot évoquant sa nature:

BoutonOk ou BtOk ou ButtonOk, btnOk c'est comme vous voulez.

Microsoft conseille:
btn pour les Boutons
lst pour les ListBox
chkpour les CheckBox
cbopour les combos
dlg pour les DialogBox
frm pour les Form
lbl pour les labels
txt pour les Textbox
tb pour les Toolsbar
rb pour les radiobutton
mm pour les menus
tmr pour les timers


Text : il s'agit du texte qui est associé à l'objet.

Dans le cas d'une fenêtre c'est le texte qui apparaît dans la barre de titre en haut.

Pour un TextBox ou un Label c'est évidement le texte qui est affiché.

On peut modifier cette propriété en mode conception ou dans le code :

Exemple : Avec du code comment faire pour que le bouton ButtonOk porte l'inscription 'Ok'

ButtonOk.Text= "Ok" 

Enabled : accessible

Indique si un contrôle peut répondre à une interaction utilisateur.

La propriété Enabled permet l'activation ou la désactivation des contrôles au moment de l'exécution. Vous pouvez désactiver les contrôles ne s'appliquant pas à l'état actuel de l'application. Vous pouvez également désactiver un contrôle pour interdire son utilisation. Par exemple, un bouton peut être désactivé pour empêcher l'utilisateur de cliquer dessus. Si un contrôle est désactivé, il ne peut pas être sélectionné. Un contrôle désactivé est généralement gris.

Exemple : désactiver le ButtonOk

ButtonOk.Enabled=False

Visible :

Indique si un contrôle est visible ou non.

ButtonOk.Visible=False 'fait disparaître le bouton.
warning Attention pour rendre visible une fenêtre on utilise la méthode .Show.

Exemple:

Button1.Enabled = True (il est accessible )

Button2.Enabled = False (il est grisé, l'utilisateur ne peut pas cliquer dessus)

Button3.Visible = False (on ne ne voit pas ce bouton 3)

Button4 a le focus

Button5.Text= "Ok"


Font :

Permet le choix de la police de caractères affichée dans l'objet.

TextBox1.Font = New Font("Courier New", 12, FontStyle.Italic)
Pour qu'un TextBox utilise la font "Courier New" de taille 12 en italique.


BackColor ForeColor:

Couleur du fond, Couleur de l'avant plan.

Pour un bouton Forecolor correspond au cadre et aux caractères.

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 un objet.

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 ultérieurement de voir ce qu'il y a dans la liste.


Locked:

Si locked est égal à True, le contrôle ne peut pas être déplacé ou redimensionné dans l'IDE.(A partir de VB2005) Dans ce cas apparaît un petit cadenas.


Size, MinimunSize et MaximumSize:

Donne les dimensions du control (largeur, hauteur) ou les dimensions minimum et maximum que l'on peut utiliser pour redimensionner le control lorsqu'il est redimensionnable.
On ne peut pas donner la largeur et hauteur directement; il faut instancier un nouvel objet Size:

Button.Size = New Size(100, 100) 'Les dimensions sont contenues dans un objet Size que l'on crée.
Width et Height: donne la largeur et hauteur.

Button.Width = 150  'ici on donne directement la valeur de la largeur en pixels

Location:

Donne les coordonnées de la position du coin supérieur gauche du contrôle.
On peut aussi utiliser Location.X et Location.Y( en pixel toujours).
L'origine (coordonnées 0,0) est en haut à gauche.

Button1.Location = New Point(100, 100)

'ou pour simplement modifier X:
Button.Location.X = 32
Top et Left donnent aussi les coordonnées de la position du coin supérieur gauche (mais en VB 2008 ils n'apparaissent pas dans la fenêtre des propriétés).

Button.Left = 32

SetBounds permet de modifier x, y, width, height.

Button.SetBounds(100, 100, 45, 45)

Modifiers concerne la visibilité de l'objet au niveau programmation:

Private: Le contrôle est visible dans le formulaire uniquement.

Public: Visible dans toute la solution.

Friend: Visible dans tout le programme et les assemblages liées.(Valeur par défaut)

Protected: Visible dans le formulaire et les sous formulaires.


AutoSize

S'il est égal à True, le contrôle se redimensionne automatiquement en fonction du contenu. Pour un bouton, par exemple la largeur va se modifier en fonction de la longueur du texte qui est dans le bouton; la hauteur aussi en fonction de AutoSizeMode.


Il y a bien d'autres propriétés.


Un contrôle peut en contenir d'autres qui en contiennent d'autres.

Exemple: un formulaire contient un cadre qui contient des boutons:

La propriété Parent indique le contrôle conteneur: celui qui contient le contrôle en cours. FindForm retourne le formulaire conteneur.

HasChildren indique si le contrôle en cours contient d'autres contrôles, dans ce cas ils sont dans la collection Controls.

Exemple:

Si un Button1 est dans un formulaire nommé Form1 et dont la barre de titre contient 'Mon formulaire'

Button1.Parent retourne "NomProgramme.Form1 Text: Mon formulaire"

FindForm retourne la même chose ici.



VIII-B-3. Évènements liés aux objets avec représentation visuelle

On a vu que les objets de l'interface utilisateur ont des procédures déclenchées par les évènements de cet objet.

2 exemples:
  1. Quand l'utilisateur clique sur un bouton Ok , la procédure BtOkClick s'effectue.
  2. Quand l'état (coché ou non coché) d'une case à cocher nommée Co change, la procédure Co.CheckedChanged est activée.
La syntaxe complète de la procédure est:

Private Sub BtOkClick (ByVal sender As System.Objet, ByVal e As System.EventArgs)  Handles BtOk.Click

End Sub

Détaillons:

Private Sub

La procédure évènement est privée donc accessible uniquement dans le module.

BtOkClick

Après le nom Sub il y a un nom de procédure. Ce nom est construit avec le nom du contrôle et l'évènement, mais cela aurait pu être n'importe quel nom car ce n'est pas ce nom qui indique ce qui déclenche la procédure.

Sender

indique le contrôle ayant déclenché l'évènement. c'est un Objet.

sender.Name contient par exemple le nom du contrôle ayant déclenché l'évènement.

e

C'est une variable de type SystemEventArgs qui permet de connaître l'évènement qui à déclenché la procédure.

Handles

Indique quel objet et évènement à déclenché la procédure. (On verra qu'il peut y en avoir plusieurs.)

Handles BtOk.Click indique que c'est l'évènement Click sur l'objet BtOk qui déclenche la procédure.


On voit que quand on crée un objet, ses procédures évènements sont automatiquement crées.

On se rend compte que dans une procédure évènement on peut modifier (en mode conception) ou lire (en mode Run) quel objet et quel évènement à déclenché la procédure. On peut même indiquer plusieurs objets liés à cette procédure.


Certains évènement sont communs à tous les contrôles:


Click

DoubleClick

GotFocus     Prise du focus

LostFocus    Perte du focus

KeyUp        Remontée d'une touche clavier

KeyPress     Pression d'une touche clavier

KeyDown      Appuie sur une touche clavier

MouseUp      Lacher le bouton gauche de la souris

MouseDown    Appuie sur le bouton gauche de la souris

MouseMove   La souris passe sur le contrôle.

Resize      Modification de la taille (pour un formulaire°
Il y a toujours des méthodes Changed déclenchées par un changement d'état: CheckedChanged pour une case à cocher, TextChanged pour un contrôle texte.

Pour ne pas alourdir les exemples, nous écrivons souvent une version simplifiée de l'en-tête de la procédure.

Nous écrivons:

Private Sub BtOkClick ()
au lieu de:

Private Sub BtOkClick (ByVal sender As System.Objet, ByVal e As System.EventArgs)  Handles BtOk.Click

Attention, au Type des paramètres.

Sender est un 'Object'.

Exemple: dans Form_Load d'une form, le paramètre sender est bien le formulaire qui a déclenché le Load mais son type est 'Objet'. Et sender.ForeColor n'est pas accepté car Forecolor n'est pas une propriété d'un objet.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Couleur=sender..ForeColor '<=  ERREUR

End Sub
Pour pouvoir utiliser ForeColor, il faut caster (transformer) l'objet en Form.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Couleur=CType(sender, Form).ForeColor

End Sub


VIII-B-4. En résumé

Le programmeur dessine les fenêtres et contrôles.

Il peut modifier les propriétés des objets dessinés:

Par la fenêtre de propriétés (en mode conception).

Par du code (des instructions) dans les procédures.


VIII-C. Les fenêtres ou 'Formulaires'

Elles correspondent aux fenêtres ou 'formulaires'. Ce sont les 'Windows Forms'.


VIII-C-1. Créer une fenêtre en mode conception

Quant on ouvre un nouveau projet il y a déjà une Form1. On peut avoir besoin d'en ajouter une autre au projet.

Menu Projet, Ajouter un formulaire Windows, cliquer sur WindowsForm, une fenêtre 'Form1' apparaît. On a bien crée une fenêtre avec la classe WindowsForms.

Toute l'interface se trouve sur des fenêtres.

En VB.net on parle de formulaire.


VIII-C-2. Propriétés

Bien sur, la fenêtre possède des propriétés qui peuvent être modifiées en mode design dans la fenêtre 'Propriétés' à droite :

Pour modifier la propriété Text par exemple, on clique sur 'Form1' en face de Text, on efface 'Form1' et on tape le nouveau texte.

On peut aussi modifier les propriétés par une ligne de code:

Form1.Text = "Nouveau texte"
Voyons les choses plus en détails:

Name :Nom du formulaire. C'est le nom qui désignera l'objet dans le code.

Donner un nom explicite: FrmDemarrage par exemple.


Dès qu'une fenêtre est créée on modifie immédiatement ses propriétés en mode conception, dans la fenêtre de propriétés, pour lui donner l'aspect que l'on désire.


Text : C'est le texte qui apparaîtra dans la barre de titre en haut.

Text peut être modifié par le code : Form1.Text= "Exemple"

Icon : propriété qui permet d'associer à la Form un fichier icône. Cette icône s'affiche dans la barre de titre, tout en haut à gauche. Si la Form est la Form par défaut du projet, c'est également cette icône qui symbolisera votre application dans Windows.

Comment mettre l'icône 'euro.ico' dans la barre de titre, par code?

Dim MyIcon As Drawing.Icon = New System.Drawing.Icon("C:\euro.ico")
 Me.ShowIcon =True
 Me.Icon = MyIcon
Comment créer une icône?

Dans l'IDE de VB (pas en VB Express!!).

Menu Fichier>Nouveau>Fichier cliquez sur Icon , Vb ouvre une fenêtre Icon1 (dans l'éditeur d'images de Visual Studio.Net) Cela permet de créer ou modifier une icône (Fichier>Ouvrir>Fichier pour modifier).

Comment enregistrer? Click droit dans l'onglet 'Icon1' ouvre un menu contextuel permettant d'enregistrer votre Icône.

On peut aussi utiliser des logiciels gratuits pour faire des icones (Photofiltre est très bien).


Cursor : propriété qui permet d'associer à la Form un curseur.

Pour mettre une croix en guise de curseur:

Me.Cursor = Cursors.Cross
C'est valable dans tous les contrôles.


WindowState :

Donne l'état de la fenêtre : Plein écran (FormWindowState.Maximized), normale (FormWindowState.Normal), dans la barre de tache (FormWindowState.Minimized).

Exemple: mettre une fenêtre en plein écran avec du code.

Me.WindowState =FormWindowState.Maximized 
(Quand on tape Me.WindowsState= , Vb donne la liste, l'énumération)

Remarque: 'Me' indique l'instance ou le code est en train de s'exécuter, dans ce cas Me indique le formulaire en cours.


ControlBox

Si cette propriété à comme valeur False, les boutons de contrôle situés à droite de la barre de la fenêtre n'apparaissent pas.


MaximizeBox

Si cette propriété à comme valeur False, le boutons de contrôle 'Plein écran' situés à droite de la barre de la fenêtre n'apparaît pas.

MinimizeBox

Si cette propriété à comme valeur False, le boutons de contrôle 'Minimize' situés à droite de la barre de la fenêtre n'apparaît pas.


En résumé:


FormBorderStyle

Permet de choisir le type des bords de la fenêtre : sans bord (None), bord simple (FixedSingle)ne permettant pas à l'utilisateur de modifier la taille de la fenêtre, bord permettant la modification de la taille de la fenêtre (Sizable)..

Si on a 'None', la barre de titre n'apparaît pas.

En VB 2005 il y a aussi Fixed3D qui ajoute un petit effet 3d de profondeur sur le tour , FixedDialog et aussi FixedToolWindows et SizableToolWindows (ces 2 dernières cachent les boutons Maximize et Minimize et l'icone).


Exemple de code:

Me.FormBorderStyle =FormBorderStyle.Sizable 
Cela donne:

None FixedSingle Sizable SizableToolWindows.


StartPosition :

Permet de choisir la position de la fenêtre lors de son ouverture.

Fenêtre au centre de l'écran ? à la position qui existait lors de la conception ...?

Me.StartPosition =FormStartPosition.CenterScreen 

Location: coordonnés du point supérieur gauche par rapport au conteneur (on utilise plutôt StartPosition).

    Me.Location = New Point(100, 100) 'c'est un objet 'point' (et non les coordonnés)

Size, MinimunSize et MaximumSize

Donne les dimensions de la Form (largeur, hauteur) ou les dimensions minimum et maximum que l'on peut utiliser pour redimensionner une fenêtre lorsqu'elle est redimensionnable.

Me.Size = New Size(100, 100) 'Les dimensions sont contenues dans un objet Size que l'on crée.

Width et Height: donne la largeur et hauteur.

On parle ici des dimensions extérieures du formulaire (Barre de titre et bordures comprises)

Pour avoir les dimensions internes utilisables (Sans barre de titre et bordures) il faut utiliser ClientSize.

On remarque que si on modifie ClientSize, cela modifie Size car la hauteur de la barre de titre n'est pas modifiable.


Opacity

Allant de 0% (0) à 100% (1), permet de créer un formulaire plus ou moins transparent.

Pour 0 il est transparent, pour 100 il est totalement opaque (normal)

Me.Opacity= 50

TransparencyKey indique une couleur qui va être transparente: si j'indique le jaune, les parties jaunes du formulaire n'apparaitrons pas en jaune mais on verra par transparence ce qu'il y a derrière le formulaire.


Locked: propriété qui si elle a la valeur False interdit le déplacement et le redimensionnement de la Form dans le designer.

Me.Locked= True interdit le déplacement et les modifications de taille du formulaire dans le designer.

Est présent dans tous les contrôles.


AutoScroll permet de placer automatiquement des barres de défilement lorsque la taille du formulaire ne permet pas l'affichage de tous les contrôles qu'il contient.


La collection Controls contient les contrôles qui sont dans le formulaire (boutons, listes..).

On peut parcourir la collection, pour voir de quel type est le contrôle:

Dim i As Integer
For i = 0 To Me.Controls.Count - 1

...Me.Controls.Item(i).GetType... 

Next i
Pour un bouton GetType retourne System.Windows.Forms.Button

Le nom du bouton est :

Me.Controls.Item(i).Name
 
On verra plus loin que pour ajouter, par code, un contrôle à une form, il faut l'ajouter à la collection Controls:

 Me.Controls.Add(MyButton)

Exemple complet:

Me.FormBorderStyle= Sizable

Me.ControlBox=False

Me.Size = New Size(100, 100)

Me.StartPosition = FormStartPosition.CenterScreen

Me.Opacity= 0.75
Me.Text = "Exemple" 
Donne au milieu de l'écran, la fenêtre:

(Dans notre exemple, on ne s'occupe pas pour le moment du bouton et du label "Bonjour")



VIII-C-3. Ouvrir un formulaire

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 fenêtre de type Form2, il faut:

Créer un Objet fenêtre (formulaire) avec le moule Form2:

            Dim f As New Form2()
La nouvelle instance f de la Class 'form2' est un objet formulaire.

Pour la faire apparaître j'utilise la méthode: .ShowDialog.

            f.ShowDialog()      
La fenêtre f est modale car on a utilisé ShowDialog : quand elle est ouverte, on ne peut pas aller dans une autre fenêtre de l'application avant de sortir de celle là. (A titre d'exemple les fenêtres MessageBox sont toujours Modales).

Utiliser .Show pour ouvrir une feuille non modale.

f.Show()  
warning Attention: une fenêtre est un objet et est 'visible' suivant les règles habituelles des objets.
Si on instancie une fenêtre à partir d'une procédure, elle sera visible dans cette procédure. Si elle est 'Public' et instanciée dans un module standard, elle sera visible partout.

f.Activate donne le focus à un formulaire visible.



VIII-C-4. Fermer un formulaire

On utilise Close.

Exemple:

Me.Close ferme le formulaire courant: le formulaire n'existe plus, il disparaît.

Par contre:

Me.Hide fait disparaître le formulaire, il n'est plus visible mais est toujours présent (Visible passe à False).



VIII-C-5. Évènements

Au cours de l'exécution:

Quand le formulaire est chargé la procédure Form1_Load() est exécutée.

On pourra donc y mettre le code initialisant la feuille.

(Form_Load se produit AVANT l'affichage du formulaire.)

Private Sub Form1_Load (..)

    ' Code initialisant les variables, chargeant les listbox..

End Sub
Le formulaire est affiché.

Form1_Activated() est exécuté ensuite car la feuille deviendra active.

Form1.GotFocus() est enfin exécuté puisque la fenêtre prend le focus (un contrôle qui a le focus est celui qui reçoit les évènements clavier, souris.. Sa barre de titre n'est plus grisée).

Form1.Enter () est exécuté lorsque l'utilisateur entre dans la fenêtre.

Dès qu'une propriété change de valeur un évènement 'PropriétéChanged' se déclenche:

Form1.BackColorChanged se déclenche par exemple quand la couleur du fond change.

Form1.Resized se déclenche quand on modifie la taille de la fenêtre.( c'est intéressant pour interdire certaines dimensions)


Form1.Leave survient quand il y a perte du focus.

Bien sur il existe aussi Form1_Desactivate quand la fenêtre perd le focus et n'est plus active.

Si l'utilisateur ferme la fenêtre:

Form1.Closing se produit avant la fermeture de la fenêtre (on peut annuler cette fermeture en donnant à la variable Cancel la valeur True)

Form1.Closed se produit lorsque la fenêtre est fermée.

Il y en a beaucoup d'autres comme par exemple les évènements qui surviennent quand on utilise la souris (MouveUp, MouseDown, MouseMove) ou le clavier (KeyUp, KeyDown, KeyPress) sur la fenêtre.


Exemple pratique:

-Comment voir 'bonjour' dans un textbox à l'ouverture du formulaire?

Private Sub Form1_Load()

TextBox1.Text= "bonjour"

End Sub

-Comment afficher le formulaire Form1 PUIS une message box affichant "Hello"?

Si on tape:

Private Sub Form1_Load(

MsgBox("hello")

End Sub
La message box est affichée Avant la fenêtre!! car le formulaire s'affiche après Form-Load!!

Il faut écrire:

Private Sub Form1_Load 
Me.Show() 'affiche la form1

MsgBox("hello")' affiche la messagebox

End Sub
Form1 est bien affichée avant la MessageBox.

Si on met le msgbox dans form_ gotfocus ou form_activated, cela boucle car à la sortie de la msgbox le gotfocus et le activated sont effectués de nouveau.


-Comment utiliser le paramètre sender.

Dans Form_Load par exemple sender.ForeColor n'est pas accepté car sender est un objet.

Pour pouvoir utiliser ForeColor, il faut caster l'objet en Form.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim Couleur As New Color =CType(sender, Form).ForeColor

End Sub


VIII-C-6. Méthodes

On a déjà vu que pour faire apparaître une fenêtre il faut utiliser .ShowDialog (pour qu'elle soit modale) ou .Show (pour non modale).

Sachant que Me indique l'instance ou le code est en train de s'exécuter:

Me.Close() ferme le formulaire.

Me.Activate() l'active s'il est visible

Me.Show() affiche un formulaire invisible

Me.Hide() rend la fenêtre invisible.



VIII-C-7. Form et code généré par vb

On se rend compte que quand on dessine une fenêtre Form1 par exemple, VB crée une nouvelle classe 'Class Form1' (Un 'moule' à formulaire!!)

Public Class Form1

End Class
Quand on tape Dim f As New Form1(), on crée une instance de la Class Form1. (Un véritable Objet 'formulaire')


Pour les surdoués:

En VB.Net 2005 ou 2008 :

L'onglet Form1.vb contient:

Public Class Form1
Public Sub New()

'  Cet appel est requis par le Concepteur Windows Form.

InitializeComponent()    '<=======Appel d'une routine qui 'initialise les composants de la form

' ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().

End Sub
End Class
On voit que la Class Form1 contient une routine nommée Sub New:

C'est Sub New qui est exécuté quand on instancie la form (On parle de 'constructeur'. La classe Form1 contient donc un constructeur (c'est la Sub New) qui appelle une routine nommée InitialiseComponent:

Pour voir InitializeComponent (le code généré par VB ,celui qui crée le formulaire), il faut, en haut sur la liste déroulant avoir 'Form1', dans ce cas en déroulant la liste à droite, on voit:

Si on clique sur InitializeComponent, l'onglet Form1.Designer.vb apparaît.

On a ainsi accès à InitialiseComponent (et à Dispose) qui sont dans une classe Partielle de Form1.
(A partir de VB 2005, une Classe peut être 'découpée' en Classes partielles)

C'est ici qu'il est indiqué que la Class hérite de System.Windows.Forms.Form et que les contrôles sont crées:

Partial Class Form1
    Inherits System.Windows.Forms.Form

    'Form overrides dispose to clean up the component list.
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button
        Me.Label1 = New System.Windows.Forms.Label
        Me.SuspendLayout()
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(26, 64)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(107, 44)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "Button1"
        Me.Button1.UseVisualStyleBackColor = True
				
En conclusion: Il faut comprendre qu'à un formulaire (fenêtre) et aux contrôles qui sont dans ce formulaire correspond du code généré par Vb. Ce code (sur lequel vous n'intervenez habituellement pas ) permet de créer le formulaire et les contrôles.



VIII-C-8. Formulaire d'avant plan, Barre de tache.

Un formulaire d'avant plan est un formulaire qui reste en avant plan, devant les autres formulaires, même si on ne l'utilise pas.

Pour définir au moment de la conception un formulaire en tant que formulaire d'avant-plan d'une application.

  • Dans la fenêtre Propriétés, attribuez à la propriété TopMost la valeur true.
Pour définir par code un formulaire en tant que formulaire d'avant-plan d'une application.

  • Dans une procédure, attribuez à la propriété TopMost la valeur true.

  Me.TopMost = True
Par contre, BringToFront ramène la fenêtre au premier plan temporairement: si l'utilisateur clique sur une autre fenêtre, elle passera au premier plan..


Me.ShowInTaskBar= True permet d'afficher l'icone du formulaire dans la barre de tache (Sinon quand on minimise le formulaire, il passe dans une toute petite fenêtre en bas de l'écran).


Dans le chapitre X on apprendra à créer plusieurs formulaires et à les faire communiquer.



VIII-C-9. Formulaire non rectangulaire

Pour créer une fenêtre en forme d'ellispe, on affecte à la Region de la fenêtre un GraphicsPath dans lequel il y a une ellipse.
Il faut le faire dans le constructeur de la Form (Form1, New) et ne pas oublier d'importer Drawing2D.

Imports System.Drawing.Drawing2D
Public Class Form1

    Public Sub New()

        ' Cet appel est requis par le concepteur.
        InitializeComponent()
        Dim Gr As New GraphicsPath()
        Gr.AddEllipse(0, 0, 250, 350)
        Me.Region = New Region(Gr)
      

    End Sub
End Class
On peut aussi créer une forme de fenêtre à partir de Points:

Dim Gr As New GraphicsPath()
Dim Points() As New Point{ New Point(10,10), New Point(20,30)....}
Gr.AddLines( Points        
Me.Region = New Region(Gr)

 

Les sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com