|
Site |
Cours VB.net |
|
|
|
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
.SetBounds(100, 100, 45, 45)Me
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_LoadMe.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 Form1Public 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..
|
|
|
|
|