jeudi 10 avril 2008

Awake

Awake, O sword
Hit the walls of unbelief
And tear them down
By the Mighty Power
Of the Almighty God

--
Alain Lompo
Excelta - Conseils et services informatiques
MCT
MCSD For Microsoft .Net
MVP Windows Systems Server / Biztalk Server
Certifié ITIL et Microsoft Biztalk Server

lundi 31 mars 2008

Mais qu'est - ce que le .Net Framework



4) Mais qu’est-ce que le .NET Framework ?

L’architecture .NET peut être définie de la façon suivante :

Il s’agit d’un ensemble de Services communs, utilisables depuis plusieurs langages objet. Ces Services s’exécutent sous la forme d’un code intermédiaire indépendant de l’architecture sous-jacente. Ces Services s’exécutent dans un « runtime » (CLR – Common Language Runtime) assurant les fonctions de gestion des ressources et de surveillance du bon fonctionnement des applications.

A la lecture de cette rapide description, on ne peut s’empêcher de faire un parallèle avec Java.

Effectivement, Microsoft ne se cache pas d’avoir puisé de façon tout à fait pragmatique ses inspirations dans technologies existantes, et en particulier dans le monde Java.

Le but premier de .NET est de fournir aux développeurs les moyens de créer des applications interopérables utilisant des "Web Services" depuis tout type de terminal : PC, assistant personnel, téléphone mobile.






Avec la plateforme .NET, Microsoft fournit plusieurs langages ainsi que les compilateurs associés, tels que VB 2005, C# 2.0, ..

D’autres éditeurs, soucieux de profiter de la vague .NET, écrivent des compilateurs pour d’autres langages non supportés par les équipes de Redmond. Nous y retrouverons des langages aussi divers et insolites que Cobol, Eiffel, Python.

Tous ces langages sont compilés sous la forme d’un langage intermédiaire (Initialement appelé MSIL, rebaptisé IL pour Intermediate Language), indépendant du matériel et du système d’exploitation.

Ce langage « IL » : Microsoft Intermediate Language est ensuite exécuté dans un Runtime, la « CLR » (Common Language Runtime) qui remplit sensiblement le même rôle que la JVM dans la plateforme Java.





Le contrôle DomainUpDown

Le contrôle DomainUpDown

Le contrôle DomainUpDown permet d’afficher une liste occupant peu de place: on ne voit qu'une ligne, on se déplace avec les boutons up et down:
On charge la liste avec:
MondomainUpDown.Items.Add("une ligne")
Quand l'utilisateur change de ligne cela déclenche SelectedItemChanged. Le texte sélectionné est dans SelectedItem.
La sub suivante affiche dans une messageBox l'index et le texte sélectionné.
Private Sub MondomainUpDown1_SelectedItemChanged _ (sender As System.Object, e As System.EventArgs)
MessageBox.Show(("Index sélectionné: " & MondomainUpDown1.SelectedIndex.ToString() & _ ControlChars.Cr & "Item sélectionné: " & MondomainUpDown1.SelectedItem.ToString()))
End Sub
Attention la liste contient des objets, il peut être nécessaire lorsqu'on utilise un des items de caster l'objet en string grace à ToString. Il existe aussi un contrôle NumericUpDown

Actionner les événements les plus courants

1.1. Mettre en œuvre des actions sur les évènements les plus courants :

Dans le code, on peut créer soi-même de toutes pièces, des contrôles et leurs évènements.

1.1.1. Créer par code des contrôles


Dans le code d'une procédure, il est possible de créer de toute pièce un contrôle, mais attention, il faut tout faire!!

Créons le bouton.

Dim Button1 As New Button


Modifions ses propriétés
Me.Button1.Location = New System.Drawing.Point(56, 144)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(104, 24)
Me.Button1.TabIndex = 0
Me.Button1.Text = "Button1"

Le bouton existe mais il faut l'ajouter à la collection Controls de la fenêtre (Cette collection contient tous les contrôles contenus dans la fenêtre):

Me.Controls.Add(Button1)


1.1.2. Ajouter des évènements.

Le bouton existe mais pour le moment, il ne gère pas les évènements.
Il faut inscrire le bouton dans une méthode de gestion d'évènements. En d'autres termes, Vb doit savoir quelle procédure évènement doit être déclenchée quand un évènement survient. Pour cela, il y a 2 méthodes:
Déclarer la variable avec le mot clé WithEvents ce qui permet ensuite d'utiliser le Handles du contrôle dans la déclaration d'une Sub:
Déclaration dans la partie déclaration du module(en haut) (WithEvents n'est pas accepté dans une procédure):
Private WithEvents Button1 As New Button
Remarque Button1 est accessible dans la totalité du module .
Puis écrire la sub évènement.
Sub OnClique ( sender As Object, EvArg As EventArgs) Handles Button1.Click
End Sub
Ainsi VB sait que pour l'évènement Button1.Click , il faut déclencher la Sub OnClique.
Il semble que quand on fait:Private WithEvents Button1 As Button (sans New) dans la partie déclaration puis DIM Button1 As New Button dans une procédure, la Sub OnClique ne fonctionne pas!!
C'est un problème de 'visibilité' donc bien faire Private WithEvents Button1 As New Button
Remarque: il pourrait y avoir plusieurs Handles sur une même sub, donc des évènements différents sur des objets différents déclenchant la même procédure.
Utiliser AddHandler
Déclaration (possible dans une procédure):
Dim Button1 As New Button
Puis écrire la gestion de l'évènement.( L'évènement Button1.click doit déclencher la procédure dont l'adresse est BouttonClique)
AddHandler Button1.Click, AddressOf BouttonClique
(ne pas oublier la virgule avant AddressOf)
Enfin on écrit la sub qui 'récupère ' l'évènement:
Private Sub BouttonClique (sender As Object, evArgs As EventArgs)
End Sub
Ainsi VB sait que pour un évènement du Button1 , il faut déclencher la Sub ButtonClique
Exemple avec AddHandler:
Créons un TextBox nommé TB et une procédure déclenchée par KeyUp de ce TextBox:
Dans une procédure (Button1_Click par exemple): Je crée un TextBox nommé TB, je le positionne, je met dedans le texte 'ici une textbox'. Je l'ajoute aux Contrôles du formulaire.
Grâce à 'AddHandler', je lie l'évènement Keyup de cet objet TB à la sub que j'ai crée :TextboxKeyup.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim TB As New System.Windows.Forms.TextBox
TB.Location = New System.Drawing.Point(2, 2)
TB.Text = "ici une textBox"
Me.Controls.Add(TB)
AddHandler TB.Keyup, AddressOf TextboxKeyup.
End sub

Sub TextboxKeyup.(ByVal sender As Object, ByVal e As KeyEventArgs)
...
End Sub

Si je crée un autre bouton TB2, j'ajoute de la même manière AddHandler TB2.Click, AddressOf TextboxKeyup2, ainsi chaque évènement de chaque contrôle à ses propres routines évènement et en cliquant sur le bouton TB2 on déclenche bien TextboxKeyup2
Attention, la procédure TextboxKeyup doit recevoir impérativement les bons paramètres: un objet et un KeyEventArgs car ce sont les paramètres retournés par un KeyUp.
Autre exemple avec AddHandler mais avec 2 boutons:
Il est possible de créer plusieurs contrôles ayant la même procédure évènement:
Exemple: Créons 2 boutons (BT1 et BT2) déclenchant une seule et même procédures (BoutonClique).
Dans ce cas, comment savoir sur quel bouton l'utilisateur à cliqué ?
En tête du module déclarons les boutons (Ils sont public):
Public BT1 As New System.Windows.Forms.Button
Public BT2 As New System.Windows.Forms.Button


Indiquons dans form_load par exemple la routine évènement commune (BoutonClique) grâce a AddHandler.
Form_Load
BT1.Location = New System.Drawing.Point(2, 2)
BT1.Text = "Bouton 1"
Me.Controls.Add(BT1)
BT2.Location = New System.Drawing.Point(100, 100)
BT2.Text = "Bouton 2"
Me.Controls.Add(BT2)
AddHandler BT1.Click, AddressOf BoutonClique
AddHandler BT2.Click, AddressOf BoutonClique
End Sub


Si c'est le bouton 1 qui a été cliqué, afficher "button1" dans une TextBox:
Sub BoutonClique(ByVal sender As Object, ByVal e As EventArgs)
If sender Is BT1 Then
TextBox1.Text = "button 1"
ElseIf sender Is BT2 Then
TextBox1.Text = "button 2"
End If
End Sub
La ruse est que déterminer quel objet (quel bouton) à déclenché l'évènement, pour cela on utilise le premier paramètre, le sender;
If sender Is BT1 Then : Si le sender est le bouton1..
Noter bien:
- le mot clé handles permet d'associer un événement à une procédure au moment de la conception.
Le concepteur sait qu'une procédure doit gérer les événements (il peut y en avoir plusieurs).
- le mot clé addhandler permet d'associer un événement à une procédure au moment de l'exécution.
Ceci est utile dans un cadre producteur-consommateur d'événements. Un objet produit un événement qui doit informer d'autres objets; au cours de l'exécution on crée l'association entre l'évènement et une procédure.
Remarque importante:
Les Handler ne sont en fait libérés qu’au déchargement complet du programme (application.exit) et non à la fermeture de la fenêtre et des objets contenus dans celle-ci... Aussi , si vous ouvrez plusieurs fois un même formulaire possédant AddHandler sur un bouton, cela créera à chaque fois un Handler qui s'ajoute aux précédents et l'évènement se déclenchera plusieurs fois lors de l'appuie du bouton!!
Il faut donc utiliser RemoveHandler pour libérer le Handler. L’instruction s’utilise de la même façon que le AddHandler ! (reprendre les lignes d’ajout du handler et remplacer AddHandler par RemoveHandler) .


Pour la petite histoire, nous créons un délégué à chaque fois que nous créons une procédure gestionnaire d'évènement avec le mot Handles ou avec AddHandler.
En C on utilise des pointeurs de fonction , adresse en mémoire indiquant ou le logiciel doit sauter quand on appelle une fonction ou un évènement. En VB on parle de délégué.

Les contrôles de type ListBox

1.1. Utiliser les contrôles de type liste (sélection, vue, images, …)

1.1.1. Les ListBox

Le contrôle ListBox affiche une liste d'éléments (d'objets) dans laquelle l'utilisateur peut faire un ou plusieurs choix.
La liste contient "tarte", "poisson", "viande", "légumes", "sauces".
Ici l'élément "poisson" est sélectionné, la ligne correspondante est en bleu.

La listBox contient une collection d'"Item":
Elle est vide au départ.
Si j'ajoute un élément à la ListBox, cela ajoute un élément à la collection Items

ListBox1.Items est une collection contenant tous les éléments (les objets) chargés dans la liste.
La propriété Items.Count indique le nombre d'éléments contenus dans la liste . Attention le premier élément est toujours l’élément 0, aussi le nombre d’éléments est égal au numéro de l'élément le plus haut plus un.
Pour ajouter ou supprimer des élements dans un contrôle ListBox

Utilisez la méthode Items.Add, Items.Insert, Items.Clear ou Items.Remove. En mode conception, vous pouvez également utiliser la propriété Items.

Exemples :
Vider la ListBox:
ListBox1.Items.Clear()

Ajouter l'élément "poisson"
ListBox1.Items.Add("poisson")
Ajouter '4'
ListBox1.Items.Add(4.Tostring)
ou
ListBox1.Items.Add(4) 'accepté car les items sont des objets.
Insérer 'lulu en 4éme position
ListBox1.Items.Insert(4, "lulu")
Les listBox acceptent des objets, elles affichent généralement ce qu'il y a dans la propriété 'Text' de l'objet.

Charger dans une ListBox les nombres de 1 à 100
For i = 1 To 100
ListBox1.Items.Add(i.ToString)
Next i

Comment enlever des éléments?
' Enlever l'élément d'index 5:ListBox1.Items.RemoveAt(5)
' Enlever l'élément sélectionné:ListBox1.Items.Remove(ListBox1.SelectedItem)
' Enlever l'élément "Tokyo":ListBox1.Items.Remove("Tokyo")

Comment lire l'élément 3?

Dim t As String
t=ListBox1.Items(3).ToString
(En Option=Strict il est nécessaire de transformer l'objet Items(3) en String avec .ToString)

Comment rechercher l'élément qui contient une chaîne de caractères?
Dim x As Integer
x=List1.FindString("pa") retourne le numéro du premier élément commençant par 'pa'.
x=List1.FindString("pa",12) retourne le numéro de l'élément commençant par 'pa' en cherchant à partir de l'élément numéro 12.
x=List1.FindStringExact("papier") 'permet de rechercher l'élément correspondant exactement à la chaîne.

Comment sélectionner un élément par code?
ListBox1.SetSelected(x, True) 'la ligne contenant x devient bleue

L’utilisateur double-clique sur un des éléments, comment récupérer son numéro ?

Grâce à SelectedIndex.
Private Sub ListBox_DoubleClick.
N=ListBox1.SelectedIndex
End If

‘N contient le numéro de l’élément sélectionné. Attention comme d’habitude, si je sélectionne la troisième ligne c’est en faite l’élément numéro 2.
SelectedIndex retourne donc un entier correspondant à l'élément sélectionné dans la zone de liste. Si aucun élément n'est sélectionné, la valeur de la propriété SelectedIndex est égale à -1.
La propriété SelectedItem retourne l'élément sélectionné ("poisson" dans l'exemple si dessus).

Et la multi sélection, quels éléments ont été sélectionnés?
La propriété SelectionMode indique le nombre d'éléments pouvant être sélectionnés en même temps.
Lorsque plusieurs éléments sont sélectionnés, la valeur de la propriété SelectedIndex correspond au rang du premier élément sélectionné dans la liste. Les collections SelectedItems et SelectedIndices contiennent les éléments et les numéros d'index sélectionnées.
Si la propriété Sorted = True, la liste est triée 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.ObjectDim i As IntegerFor i = 0 To 9Ite(i) = "Item" & iNext i
ListBox1.Items.AddRange(Ite)
Comment 'charger' une ListBox automatiquement à partir d'un fichier texte.
ListBox1.Items.AddRange(System.IO.File.ReadAllLines("c:\list.txt"))
(le fichier list.txt est un fichier .txt crée avec NotePad par exemple et contenant les items séparés par des retours à la ligne"
Exemple de fichier:
"philippe
paul
jean
luc"


Comment connaître l'index de l'élément que l'on vient d'ajouter? (et le sélectionner)
Dim x As Integerx = List1.Items.Add("Hello")List1.SelectedIndex = x
On utilise la valeur retournée (x dans notre exemple) par la méthode Add.
(NewIndex n'existe plus en VB.NET)


Comment affecter à chaque élément de la liste un numéro, une clé?

Exemple : Dans un programme, chaque utilisateur a un nom et un numéro; je charge dans une ListBox la liste du nom des utilisateurs; quand on clique sur la liste, je veux récupérer le numéro de l'utilisateur (pas l'index de l'élément).
Comment donc, à chaque élément de la Listbox, associer un numéro (différent de l'index).

- En VB6 on utilisait une propriété (ListBox.ItemData()) pour lier à chaque élément de la ListBox un nombre (une clé); cela n'existe plus en VB.Net!!
Il existe des fonctions de compatibilité VB6, mais il faut éviter de les utiliser:
VB6.SetItemData(ListBox1, 0, 123) 'pour lier à l'élément 0 la valeur 123.

- Une alternative, pas très élégante:
Ajouter l'élément "toto"+chr$(9)+chr$(9)+ clé (clé n'est pas visible car les caractères de tabulation l'ont affichée hors de la Listbox)
Quand l'utilisateur clique sur la ligne, on récupère la partie droite donc la clé.
On peut aussi utiliser un Listview avec 2 colonnes; la seconde colonne servant à stocker le numéro.

- Une solution plus élégante:
On utilise le Tag du ListBox (Le Tag est une propriété qui peut contenir un objet (un tableau par exemple; chaque élément de ce tableau va contenir le numéro de l'utilisateur.)

Dim pos As Integer
ReDim ListBox1.Tag(100) 'Création du tableau dans le Tag

pos = ListBox1.Items.Add("Utilisateur1") 'On ajoute le nom de l'utilisateur1, pos est l'index de l'élément ajouté
ListBox1.Tag(pos) = 1 'On ajoute dans le Tag le numéro de l'utilisateur
pos = ListBox1.Items.Add("Utilisateur2")
ListBox1.Tag(pos) = 2
pos = ListBox1.Items.Add("Utilisateur3")
ListBox1.Tag(pos) = 3

'Quand l'utilisateur double-clique dans la liste, on récupère le numéro correspondant
Private Sub ListBox1_DoubleClick()
MsgBox(ListBox1.Tag(ListBox1.SelectedIndex))
End Sub

La contrainte est qu'il faut connaître le nombre maximum d'élément à charger et charger la liste dans l'ordre; il faut être en Option Strict=Off (sinon il y a liaison tardive).

Quand on charge une ListBox directement avec une base de données, il y a une solution pour gérer une clé.

Remarque:
Lorsque la propriété MultiColumn a la valeur true, la liste s’affiche avec une barre de défilement horizontale. Lorsque la propriété ScrollAlwaysVisible a la valeur true, la barre de défilement s'affiche, quel que soit le nombre d'éléments.

Comment à partir des coordonnées de la souris connaître l'élément de la liste qui est survolé?

Exemple: La souris survole ListBox2 , on a e.X et e.Y, coordonnées de l'écran, comment obtenir l'index.
On va d'abord transformer e.X et e.Y en coordonnées client (par rapport à la listBox)
ListBox2.PointToClient(New Point(e.X, e.Y)
Puis ListBox2.IndexFromPoint() va retourner l'index survolé.

Private Sub ListBox2_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox2.DragOver
IndexdInsertion = ListBox2.IndexFromPoint(ListBox2.PointToClient(New Point(e.X, e.Y)))
End Sub

Les propriétés d'un formulaire

1.1.1. Définir les propriétés d’un formulaire

Lors de la création de l’interface utilisateur d’une application Visual Basic, vous devez définir les propriétés des objets que vous créez.

Vous pouvez définir les propriétés de formulaire soit en écrivant du code, soit en utilisant la fenêtre Propriétés. Tous les paramètres définis au moment de la conception-lorsque vous créez l’application-servent de paramètres initiaux à chaque nouvelle exécution de votre application.

! Pour définir les propriétés de formulaire lors de la conception.
1. Si la fenêtre Propriétés n’est pas ouverte, dans le menu Affichage, cliquez sur Fenêtre Propriétés.
2. Dans la vue Conception, cliquez sur le formulaire dont vous voulez définir une propriété. Le nom du formulaire apparaît dans la liste déroulante Objet en haut de la fenêtre Propriétés.
3. Utilisez les boutons Alphabétique et Par catégorie de la fenêtre Propriétés pour afficher les propriétés du formulaire dans l’ordre alphabétique ou par catégorie.
4. Dans la fenêtre Propriétés, cliquez sur la propriété que vous souhaitez définir. Lorsque vous cliquez sur une propriété, sa description s’affiche au bas de la fenêtre Propriétés, dans le volet Description.
5. Tapez ou sélectionnez la valeur que vous voulez donner à la propriété.
6. Pour voir l’impact du nouveau paramètre sur le formulaire, vous pouvez exécuter votre application en cliquant sur le bouton Démarrer dans la barre d’outils standard

Le tableau suivant décrit certaines des propriétés de formulaire les plus généralement définies lors de la conception.


Lorsque vous démarrez un nouveau projet, Visual Basic considère que Form1 est l’objet de démarrage par défaut de votre projet. Si vous modifiez la propriété Name de Form1, vous devez aussi donner le même nom à l’objet de démarrage de votre projet, sinon le projet ne démarrera pas correctement.

! Pour modifier l’objet de démarrage de votre projet
1. Si l’Explorateur de solutions n’est pas ouvert, dans le menu Affichage, cliquez sur Explorateur de solutions.
2. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, puis cliquez sur Propriétés.
3. Dans la zone Objet de démarrage, cliquez sur le nouvel objet de démarrage de votre projet.

Les interfaces ratées

1.1. Conséquences d’une interface ratée et avantages d’une interface réussie

Une interface ratée produit entre autres conséquences

- Un sentiment de confusion lors de l’expérience utilisateur avec l’application
- Dénote un manque de professionnalisme de l’équipe de développement
- Un manque de sérieux du chef de projet
L’interface utilisateur réussie met immédiatement en confiance le client d’autant plus qu’elle constitue son premier contact avec l’application

Réalisations des interfaces


Cet article s’intéresse à une définition minimaliste des règles ergonomiques applicables pour une application événementielle VB .Net

1. Règles de réalisation des interfaces


1.1. Règles sur l’ergonomie d’une interface utilisateur

Dans cette section on détaillera les points suivants relatifs aux concepts de base de conception et réalisation d’interfaces graphiques ergonomiques.

Qu’est – ce qu’une interface utilisateur et qu’entend – on par la couche présentation ?

Qu’est – ce qu’un composant d’interface utilisateur

Quelles sont les fonctionnalités des composants d’interface utilisateur

Règles de base de conception d’interface utilisateur

Eléments et métaphores d’interface utilisateur

Quelles sont les spécificités d’une interface utilisateur ergonomique et bien conçue.



1.1.1. Qu’est – ce qu’une interface utilisateur et qu’entend – on par la couche présentation ?

Le développement de solutions logicielles sous la plate forme .Net est soumis par défaut à la méthodologie MSF (Microsoft Solution Framework) au sein de laquelle une solution se compose des blocs principaux suivants ainsi que de leur décomposition :

Couche présentation

o Composants d’interface utilisateur
§ Gère les interactions avec les utilisateurs
· Affiche des données à l’utilisateur
· Obtient des données de l’utilisateur
· Interprète les interactions de l’utilisateur avec l’interface
· Change l’état de l’interface

§ Les composants d’interface utilisateur ont pour objectif d’alerter les utilisateurs, de leur envoyer des messages, de capter des événements envoyés par les utilisateurs, de restreindre leurs accès à des champs prédéfinis, de valider les données qu’ils saisissent, de localiser leurs présentations, d’informer les utilisateurs sur l’état du système et de leur application et de leur permettre de personnaliser l’application selon les préférences des utilisateurs.


o Composants de processus d’interface utilisateur

Couche métier
o Interface de services (à ne pas confondre avec les interfaces graphiques de la couche présentation)
o Workflow métier
o Composants métier
o Entités métier

Couche d’accès aux données
o Composants de la logique d’accès aux données
o Agents de service

Couche de composants transverse
o Communication
o Gestion opérationnelle
o Sécurité





Conventions de codage minimales

Dans cet article nous parcourons une gamme de convention de codage que nous pourrions utiliser pour éclaircir du code VB .Net


1.1. Connaître les conventions de codage minimales


Conventions de codage Visual Basic
Ces conventions sont utilisées par Microsoft pour développer des exemples et de la documentation. La spécification du langage Visual Basic ne définit aucune norme de codage.
Les conventions de codage donnent au code un aspect homogène, afin que les lecteurs puissent se concentrer sur le contenu et non pas sur la disposition.
Les conventions permettent aux lecteurs de comprendre le code plus rapidement, parce qu'ils peuvent faire des hypothèses selon leur expérience précédente.
Les conventions facilitent la copie, la modification et la gestion du code.
Les conventions décrivent les méthodes conseillées pour Visual Basic.
Les indications concernant l'attribution d'un nom sont décrites dans Instructions de conception pour le développement de bibliothèques de classes.
Vous ne devez pas modifier le nom des objets créés avec les outils du Concepteur de Visual Studio pour les rendre conformes aux indications.
Utilisez les qualifications d'espace de noms au lieu d'ajouter des instructions Imports. Si un espace de noms est importé par défaut dans un projet, vous ne devez pas qualifier pleinement le code parce qu'il s'exécutera de façon non qualifiée avec Intellisense lors du copier-coller. Lorsque vous coupez de longues lignes de code pour en simplifier la lecture, les noms qualifiés risquent d'être coupés après le "." Par exemple :
Dim collection As System.Diagnostics. _ InstanceDataCollectionCollection


1.1.1. Conventions de disposition
Une bonne disposition utilise la mise en forme pour souligner la structure du code et simplifier la lecture du code.
Utilisez la fonctionnalité Mise en forme automatique avec tabulation du code pour mettre le code en forme avec les paramètres par défaut (mise en retrait intelligente, mise en retrait de 4 caractères, enregistrement des onglets en tant qu'espaces). Pour plus d'informations, consultez Spécifique à VB, Basic, Éditeur de texte, boîte de dialogue Options.
Mettez une seule instruction par ligne. N'utilisez pas les deux-points (:).
Mettez une seule déclaration par ligne.
Mettez en retrait les lignes de continuation en utilisant un taquet de tabulation.
Laissez au moins une ligne vide entre les définitions de méthode et de propriété.

1.1.2. Conventions de commentaires
Ne mettez pas de commentaires à la fin d'une ligne de code, mais plutôt sur une ligne séparée.
Commencez le texte du commentaire par une lettre majuscule.
Ajoutez un point à la fin du commentaire.
Insérez un espace entre le délimiteur de commentaire (') et le texte de commentaire.
' Here is a comment.
Ne créez pas de blocs d'astérisques mis en forme autour des commentaires.

1.1.3. Structure du programme
Avec la méthode Main, utilisez la construction par défaut pour les nouvelles applications console et utilisez My pour les arguments de ligne de commande.
Sub Main() For Each argument As String In My.Application.CommandLineArgs ' Add code here to use the string variable. Next End Sub

1.1.4. Indications concernant le langage
String, type de données
Utilisez le signe & pour concaténer des chaînes :
MsgBox("hello" & vbCrLf & "goodbye")
Pour ajouter des chaînes dans des boucles, utilisez l'objet StringBuilder :
Dim longString As New System.Text.StringBuilder For count As Integer = 1 To 1000 longString.Append(count) Next
Type de données non signé

Utilisez Integer plutôt que des types non signés sauf si vous donnez plus d'importance à la mémoire.
Tableaux
Utilisez une syntaxe courte lorsque vous initialisez des tableaux sur la ligne de déclaration :
Dim letters() As String = {"a", "b", "c"}
Au lieu de :
Dim letters() As String = New String() {"a", "b", "c"}
Mettez l'indicateur de tableau sur la variable, pas sur le type :
Dim letters() As String = {"a", "b", "c"}
Au lieu de :
Dim letters As String() = {"a", "b", "c"}
Utilisez la syntaxe {} lorsque vous déclarez et initialisez des tableaux comportant des types de données de base :
Dim letters() As String = {"a", "b", "c"}
Au lieu de :
Dim letters(2) As String letters(0) = "a" letters(1) = "b" letters(2) = "c"
Utilisation du mot clé "With"
Lorsque vous êtes confronté à une série d'appels à un objet, utilisez le mot clé With.
Déclaration de variables de boucle dans l'instruction For ou For Each
Exemple :
For count As Integer = 0 To 2 MsgBox(names(count)) Next
Exemple :
For Each name As String In names MsgBox(name) Next
Utilisation des instructions Try...Catch
Utilisez toujours les instructions Try...Catch avec un objet qui implémente une méthode Dispose.
N'utilisez pas l'instruction On Error Goto.
Utilisation de l'instruction Using
Si vous utilisez une instruction Try...Catch et si le seul code dans le bloc Finally est un appel à Dispose, utilisez l'instruction Using à la place.
Mot clé IsNot
Utilisez le mot clé IsNot plutôt que Not ... Is Nothing.
Instances de formulaires par défaut
Utilisez Form1.ShowDialog plutôt que My.Forms.Form1.ShowDialog.
Mot clé New
Utilisez l'instanciation courte :
Dim employees As New Collection()
Au lieu de :
Dim employees As Collection = New Collection()
Utilisez le constructeur sans paramètre, puis définissez les propriétés à l'aide du mot clé With :
Dim orderLog As New EventLog() With orderLog .Log = "Application" .Source = "Application Name" .MachineName = "Machine Name" End With
Gestion des événements
Utilisez Handles plutôt que AddHandler :
Private Sub MenuItem1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MenuItem1.Click
Utilisez AddressOf et n'instanciez pas le délégué explicitement :
Dim closeItem As New MenuItem("Close", AddressOf MenuItem1_Click) Me.MainMenu1.MenuItems.Add(closeItem)
Lorsque vous définissez un événement, utilisez la syntaxe courte et laissez le compilateur définir le délégué :
Public Event WhatHappened(ByVal source As Object, _ ByVal e As WhatHappenedEventArgs)
Utilisation des membres partagés
Membres Shared appelés à l'aide du nom de classe, ne provenant pas d'une variable d'instance.
MsgBox, fonction
Utilisez MsgBox au lieu de MessageBox.Show ou Console.WriteLine.
Utilisation de l'espace de noms My
Utilisez les fonctionnalités My plutôt que la bibliothèque de classes .NET Framework ou la bibliothèque runtime Visual Basic.
Utilisation des membres de la bibliothèque runtime Visual Basic
Utilisez la bibliothèque runtime Visual Basic plutôt que la bibliothèque de classes .NET Framework.

L'événementiel en VB .NET : se familiariser avec les notions

1.1. Se familiariser avec les notions d’objet, de propriété, de méthode et d’événement

Cette leçon décrit les concepts de programmation fondamentaux qu’il vous faut bien comprendre avant d’écrire du code en Visual Basic .NET.

Cette leçon aborde les points suivants :
! Présentation de la programmation événementielle
! Classes : Modèles servant à la création des objets
! Présentation des propriétés, des méthodes et des événements
! Application pratique : Propriétés, méthodes et événements


1.2. Apprendre à instancier et à personnaliser des contrôles
Tous les contrôles - qu’ils soient visuels ou non, et quels que soient l’espace de nom auxquels ils appartiennent – sont définis comme des classes, héritant parfois de classes particulières. Ainsi les formulaires visuels sont des classes héritant de la classe System.Windows.Forms.

Par conséquent leur instanciation se fait comme toute instanciation de classe :

Exemple

Dim accountManager as accountForm = new accountForm(accountNumber)

La partie en rouge de la ligne de code correspond à l’instanciation du contrôle.

Pour la personnalisation des contrôles, il suffit d’effectuer un click bouton droit de la souris dans la surface visible du contrôle puis de choisir l’élément de menu « Propriétés » qui donne accès aux différentes propriétés du contrôle ainsi qu’à des zones de saisie de nouvelles valeurs correspondantes.

Notons qu’on peut effectuer de façon programmatique la même tâche.


1.3. Écrire du code dans une procédure événementielle

1.3.1. Présentation de la programmation événementielle

Les applications écrites en Visual Basic sont événementielles. Pour bien comprendre ce qu’est la programmation événementielle, il faut l’opposer à la programmation procédurale.

Les applications écrites en langage procédural s’exécute en avançant logiquement, ligne après ligne, dans le code du programme. Le flux logique peut être temporairement transféré à d’autres parties du programme au moyen de diverses instructions de code, dirigeant le programme du début à la fin.

Dans un programme procédural, le programme principal contrôle la façon dont l’utilisateur entre les informations.


La figure suivante illustre la programmation procédurale.


Dans une application événementielle, les instructions du programme ne s’exécutent que lorsqu’un événement spécifique appelle une section de code associée à cet événement. Les événements peuvent être déclenchés par une touche du clavier, une action de la souris, le système d’exploitation ou le code de l’application. Un programme événementiel évalue constamment des ensembles d’événements et y répond. Si un événement se produit et que la
procédure d’événement associée contient du code, Visual Basic appelle ce code.

Examinez ce qui se passe lorsqu’un utilisateur clique sur un bouton, appelé Button1, dans un formulaire. Le clic de la souris est un événement. Lorsque l’événement Click se produit, Visual Basic exécute le code de la procédure Sub appelée Button1_Click. Une fois le code exécuté, Visual Basic attend le prochain événement.

Mener à bien un projet professionnel .Net - Spécifications

Dans cette serie d'articles nous prenons un projet professionel ciblant la plate forme .Net, nous le décortiquons et nous l'implémentons.

Principales fonctionnalités attendues du logiciel
§ L’établissement des plannings des formations, l’affectation des formateurs et l ‘élaboration de leur emploi du temps. Il s’agit de la fonctionnalité principale attendue.
§ La gestion des moyens de formation (salle, matériel, ..)
§ La gestion des examens et des contrôles continus. Elle comprend aussi la production des relevés de notes, des PV de passage et de fin de formation des stagiaires.
§ La coordination des équipes pédagogiques et le suivi des actions
§ Le suivi de l’insertion des stagiaires à l’issue de la formation
§ Le suivi des périodes d’application en entreprise
§ Le gestion des programmes et des actions de formation continue

Les principaux rôles qui seront sollicités autour de cette activité sont décrits dans ce qui suit:

Rôle du directeur des études (DE) :
Sur la base du contrat de programme et de ses aménagements, il doit :
§ définir les calendriers de formation,
§ choisir (ou négocier avec les équipes) les formateurs qui prendront la fonction de CEP,
§ accompagner les CEP dans l’organisation détaillée de la formation (planning de la formation),
§ sur proposition des CEP, affecter les formateurs aux équipes programme et traiter les conflits de ressources entre les différentes formations,
§ sélectionner les intervenants externes nécessaires aux équipes programmes en accord avec les CEP,
§ affecter les moyens de production (salles, moyens techniques) en accord avec les CEP,
§ en relation avec le Chef de département gestion des ressources, affecter les ressources nécessaires à la réalisation des formations dans la limite de ses budgets,
§ intégrer les demandes de formation continue ou de service aux entreprises et y affecter les ressources humaines nécessaires,
§ valider les réponses techniques élaborées par les équipes programmes aux demandes du responsable de la relation entreprise,
§ assurer le suivi de la production au cours des réunions techniques mensuelles,
§ rendre compte des réalisations au Directeur d’établissement.

Rôle du Coordonnateur d’équipe programme (CEP) :
Pour la formation ou la filière dont il est responsable, le coordonnateur d’équipe programme doit :

§ élaborer le planning détaillé de la formation dans le cadre du calendrier fourni par le DE,
§ définir précisément les besoins en compétence de la formation,
§ proposer une équipe programme et son plan d’action,
§ définir les moyens de réalisation de la formation et en faire la demande au DE,
§ élaborer avec l’équipe programme les réponses techniques aux demandes de FC ou de service aux entreprises,
§ animer les modules de formation de son domaine d’expertise,
§ formaliser les commandes passées aux intervenants de l’équipe programme pour les autres modules,
§ contrôler les réalisations des intervenants et capitaliser les préparations,
§ accompagner les stagiaires dans leur recherche de stage,
§ participer à la maintenance du vivier d’entreprises,
§ organiser les réunions hebdomadaires de l’équipe programme,
§ rendre compte au DE des réalisations lors des réunions techniques,
§ informer la gestion des stagiaires sur la réalisation des parcours.

Rôle du formateur :
Qu’il soit formateur interne ou intervenant externe, le formateur doit :
§ préparer l’action de formation dans le respect de la commande passée par le CEP,
§ communiquer les éléments de préparation au CEP,
§ animer l’action et évaluer les stagiaires,
§ analyser sa pratique lors des réunions hebdomadaires de l’équipe,
§ élaborer les réponses techniques aux demandes des entreprises dans sa spécialité,
§ participer à l’élaboration des épreuves sous pilotage du CDC,
§ participer à l’ingénierie des parcours de formation sous pilotage du CDC

Rôle du responsable des épreuves :
Le responsable des épreuves est directement rattaché au Directeur des études. Il a pour mission de :
§ s’assurer que des épreuves sont disponibles pour tous les modules d’un programme,
§ préparer la session d’épreuves (photocopies, liste des stagiaires délivrée par le formateur, salle et matériel),
§ récupérer l’ensemble des documents d’épreuve après correction par le formateur,
§ archiver ces documents.