Site:  Cours VB.net  
3.2 Les Forms.

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

 

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.

 

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  

 

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.Icon = MyIcon

 

Comment créer une icône?

- Dans l'IDE de VB (pas en VB Express 2005 ou 2008 malheureusement!!).

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.

- Avec un programme tiers( PhotoFiltre par exemple).

 

 

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é:

ControlBox MaximizeBox MinimizeBox   Result
False     Pas de bouton
True True True La form peut être minimized ou maximized
True True False La form peut être maximized mais pas minimized
True False True La form peut être minimized mais pas maximized 
True False False La form peut être fermée uniquement.

 

 

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'icône).

 

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

 

Size, MinSize et MaxSize

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 1 il est totalement opaque (normal)

 

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")

 

 

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() 

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.

 

 

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).

 

 

Propriétés:

 

On a vu qu'un formulaire possédait de nombreuses propriétés:

Name    contenant le nom du formulaire.

Text    contenant ce qui est affiché dans la barre de titre.

Mais aussi  

Left et Top qui donne les coordonnées x et y du coin supérieur gauche du formulaire.

Me.Left=100

Width et Height: donne la largeur et hauteur.

Location: coordonnés du point supérieur gauche par rapport au conteneur.

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

Size: taille du contrôle ; accepte un objet Size comportant: largeur, hauteur

Me.Size = New Size(100, 100)

(MaxSize donne la taille maximum possible).

 

SetBounds permet de modifier left, top, width, heigth

Me.SetBounds(100, 100, 45, 45)

 

 

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:

 Controls.Add(MyButton)

 

É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 réellement affiché à la fin de Form_Load et seulement à la fin.

 

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

 

 

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.

 

 

System.Windows.Forms.Form 

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

Elle hérite de System.Windows.Forms.Form: on voit bien dans le code:

Inherits Systeme.Windows.Forms.Form

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 2003:

 

Quand on regarde le code, il y a:

-du code généré automatiquement par le concepteur Windows Forms  et qui crée la fenêtre et ses contrôles.

(on peut le voir en cliquant sur le petit '+'; en ouvrant la région 'Code généré par le concepteur Windows Form')

Comme pour toute classe, il y a un constructeur (Sub New) un destructeur (Sub Dispose) et le code pour créer les contrôles contenus dans le formulaire.

-les procédures liées aux évènements.

 

En VB.Net 2005:

 

L'onglet Form1.vb contient:

 

Public Class Form1

Public Sub New()

' This call is required by the Windows Form Designer.

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

' Add any initialization after the InitializeComponent() call.

End Sub

 

La classe contient un constructeur (Sub New) qui apelle une  routine Ititialise Component:

Pour voir cette routine, il faut passer par le menu de droite:

 

 

 

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.

(En 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

 

 

 

Formulaire d'avant plan:

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.

Pour définir par code un formulaire en tant que formulaire d'avant-plan d'une application.

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