Introduction

Cet article a pour objectif de vous familiariser avec la nouvelle plateforme de .NET framework de Microsoft. Nous verrons le lien avec le language C#, puis nous verrons comment fonctionne le concepteur de formulaire de Visual Studio .NET. Enfin nous écrirons un petit programme afin de tester toutes ces nouvelles connaissances.

Qu’est ce que C# ?

Le C# est l’un des langages qui peut être utilisé pour créer des applications qui s’exécuterons dans le CLR.NET. Il s’agit d’une amélioration des langages C et C++. Il a été créé par Microsoft pour fonctionner avec la plateforme .NET. D’un développement récent, le langage C# a été conçu en exploitant les meilleurs fonctions d’autres langages tout en résolvant les problèmes qu’ils présentaient. Le développement d’application avec C# est plus facile qu’avec C++ car la syntaxe du langage est plus simple. Toutefois, C# est un langage puissant et presque tout ce que vous souhaitez réaliser en C++ peut être fait en C#. Ce fait étant établi, ces fonctions de C# qui équivalent aux fonctions les plus évoluées de C++, telles que l’accès direct et la manipulation de la mémoire système, ne peuvent être exécutées qu’avec le code marqué :  » unsafe ». Cette technique de programmation avancée représente un danger potentiel (d’où son nom) car il existe un risque d’écraser des blocs de mémoire système cruciaux pouvant aboutir à des résultats catastrophiques. Parfois, le code C# est un peu plus verbeux que le C++ car C# est un langage avec un contrôle strict des types (type safe) au contraire du C++). Pour faire simple, cela signifie qu’une fois un type attribué aux données, il ne peut pas se transformer par la suite en un autre type sans rapport. En conséquence, des règles strictes relative à la conversion de types doivent être appliquées. L’application de telles règles se traduit par l’écriture de code supplémentaire pour l’exécution d’une même tâche en C# qu’en C++, toutefois avec l’avantage d’un code plus robuste et un déboguage plus simple (.NET peut à tout moment trouver le type attribué à une donnée). En C#, il est donc probable que nous ne puissions pas effectuer une opération du type :  » Attribuer un espace mémoire de 4 octets à des données qui font 10 octets de long et interprétez-le comme X. « , cela n’est cependant pas une mauvaise chose. C# n’est qu’un des langages disponibles pour le développement .NET, mais il reste certainement le meilleur. Il a l’avantage d’être l’unique langage conçu à partir de rien pour le .NET Framework et sera peut-être le principal langage utilisé dans les versions de .NET prise en charge par d’autres systèmes d’exploitation. Afin de conserver autant que possible les similitudes de VB.NET avec ses prédécesseurs tout en s’adaptant au CLR, certaines des fonctionnalités de la bibliothèque de code .NET ne sont pas complètement prise en charge. En revanche, C# peut utiliser chaque fonction offerte par la bibliothèque du .NET Framework.

Comment fonctionnent les applications .NET ?

Lorsque nous compilons du code qui utilise la bibliothèque du .NET Framework, nous ne créons pas immédiatement du code natif spécifique au système d’exploitation. Au lieu de cela, nous compilons notre code dans le code MSIL (Microsoft Intermediate Language). Ce code n’est ni spécifique à un système d’exploitation ni à C#. D’autre langage .NET, par exemple Visual Basic.NET, effectuent aussi une compilation dans ce langage lors de la première étape. Cette dernière est réalisée par VS lorsque nous y faisons appel pour développer des applications C#. Un travail supplémentaire est bien entendu requis pour exécuter une application. C’est la tache du compilateur JIT (Just In Time) qui compile le MSIL en code natif spécifique au système d’exploitation et à l’architecture de la machine cible. C’est seulement à ce stade que le système d’exploitation peut exécuter l’application. L’expression  » juste à temps  » reflète bien ici l’idée que le code MSIL n’est compilé que lorsque c’est nécessaire. Résumons donc les étapes nécessaires à la création d’applications .NET

1. Le code de l’application est écrit à l’aide d’un langage compatible avec .NET comme C# :

2. Ce code est compilé dans MSIL qui est stocké dans un assemblage :

3. Lorsque le code est exécuté (soit en tant qu’exécutable, soit lorsqu’il est utilisé à partir d’un autre code), il doit être en premier lieu, compilé en code natif à l’aide d’un compilateur JIT :

4. Le code natif est exécuté dans le contexte du CLR managé en parallèle avec toute autre application ou processus en cours d’exécution.

Suite de l’article

Les contrôles Windows forms

Concepteur de formulaire

L’un des principaux atouts de Visual Basic était la simplicité du développement d’applications Win32. En effet, toute l’interfaces utilisateurs de la future application se dessinait à la souris via une sorte d’éditeur qui nous fournissait une boite à outils avec lequel on choisissait et plaçait les contrôles dans un formulaire. Ce formulaire n’était en fait rien d’autre que la fenêtre principale de notre application. On obtenait alors un gain de temps considérable sur la durée du développement car plus aucune ligne de code (ou presque) n’était nécessaire à la gestion de l’interface graphique. Ce procédé n’était pas proposé sous Visual C++ (sauf avec les MFC). Tout ce qui était ainsi fondement de Visual Basic est maintenant, via Visual Studio .NET, disponible pour les programmeurs C#. L’éditeur qui nous permettra de concevoir l’interface graphique de nos applications s’appelle le concepteur de formulaire Windows. Pour examiner vous même ce concepteur, lancer un nouveaux projet Visual C# de type Windows Application. Vous devriez voir apparaître une fenêtre de ce type :

Le centre de l’écran présente le formulaire que vous êtes occupé à créer. Vous pouvez glisser, déplacer les contrôles de la boite d’outils sur le formulaire. En bas à droite, se trouve la fenêtre de propriétés. Ce volet présente toutes le propriétés de l’élément sélectionné. Il constitue un lieu facile d’accès pour modifier les propriétés.

Au centre, se trouve la boite à outils. Elle contient tous les contrôles disponibles pour développer dans l’environnement .NET. Plus particulièrement, elle permet une sélection d’outils de première importance pour développement d’application Windows. En revanche, si vous choisissez de créer des formulaires web, vous devrez utiliser des boites à outils différentes.

Dans le cadre de cet article nous ne verrons que 5 des contrôles présent dans la boite à outils :

  • Label
  • TextBox
  • Button
  • GroupBox
  • RadioButton

Les contrôles label C’est un contrôle simple à un seul objectif : présenter une légende ou un texte court pour fournir à l’utilisateur des explications sur le formulaire. Ce contrôle possède beaucoup de propriété, nous ne les verrons pas toutes, voici la liste de plus utilisés :

Text Le texte affiché dans le contrôle Label
Image Cette propriété permet de spécifier l’image à afficher sur l’étiquette.
BorderStyle Permet de spécifier de style de bordure entourant l’étiquette. Par défaut, il n’y à pas de bordure.
TextAlign Alignement du texte dans le contrôle

Les contrôles TextBox Les zones de texte devraient être utilisées quand vous souhaitez donner à l’utilisateur l’occasion de saisir du texte que vous ne connaissez pas au moment de la création de l’application (par exemple le nom de l’utilisateur). La fonction principale d’une zone de texte est la saisie de texte par l’utilisateur. N’importe quel caractère peut être saisi, et il est possible de forcer l’utilisateur à n’entrer que des valeurs numériques. Ce contrôle possède beaucoup de propriété, nous ne les verrons pas toutes, voici la liste de plus utilisés :

MaxLenght Une valeur indiquant le nombre maximum de caractère accepté dans la zone de texte. Définissez cette valeur à 0, et la taille maximale est fixée par la mémoire disponible.
Multiligne Indique si le contrôle peut afficher plusieurs lignes.
PasswordChar Spécifie si un caractère mot de passe remplace les caractères saisie dans une zone de texte simple ligne.
ReadOnly Indique si le texte est en lecture seule.
SelectionText Indique le texte sélectionné dans la zone texte

Les contrôles Button L’utilisation d’un contrôle bouton est claire et sans équivoque. Vous ajouter un contrôle à votre formulaire et vous double-cliquez dessus pour ajouter le code à l’évènement click (nous reviendrons sur les évènement un peu plus tard.)

Les contrôles RadioButton Traditionnellement, les boutons radio se présentent sous la forme d’une étiquette possédant un pont à leur gauche. Ce point peut être sélectionné ou non. Vous utiliserez les boutons radio quand vous souhaiterez donner à l’utilisateur un choix entre plusieurs options mutuellement exclusives. Comme exemple, considérez le choix du sexe de l’utilisateur. Ce contrôle possède beaucoup de propriété, nous ne les verrons pas toutes, voici la liste de plus utilisés :

Appearance Un RadioButton peut être affiché sous la forme d’ue étiquette possédant un test circulaire à sa gauche, à sa droite ou en son milieu ou sous forme de bouton standard. Lorsqu’il est affiché sous la forme de bouton, le bouton apparaît pressé quand il est pressé, et en 3D dans le cas contraire.
AutoCheck Une marque est affiché sur le bouton radio quand cette valeur est à true, et il n’y à aucune marque dans le cas contraire.
Checked Indique l’état du contrôle. True si le contrôle est marqué et false dans le cas contraire.

Les contrôles GroupBox Ce contrôle est souvent utilisé en conjonction avec les contrôles RadioBox et CheckBox pour afficher un cadre, une légende et une série de contrôles logiquement liés. L’utilisation d’un groupe d’option est très simple. Vous glisser ce contrôle sur votre formulaire et y ajoutez les contrôles qu’il doit contenir (vous ne pouvez pas agir inversement). A l’intérieur d’un groupe d’option, un seul RadioBox peut être sélectionné à la fois.

La notion d’événements

Quand l’utilisateur clique sur un bouton, ou tape du texte dans un TextBox, le développeur que vous êtes souhaite être averti de ce qui se passé. Pour ce faire, les contrôles utilisent les événements. Un événement est un signale émis par le système d’exploitation vers une application, par exemple :  » Click  » ou  » KeyDown  » ces deux événements décrivent respectivement un click effectué par l’utilisateurs et un bouton du clavier pressé. Par la suite le développeur à la possibilité de récupérer un peu plus d’information concernant l’événement en question comme quelle est la touche qui à été pressé, ou à quelle coordonné de l’écran s’est produit le click de la souris. Comme vous pouvez vous en doutez, les contrôles possèdent des événements communs, et différents. Le contrôles TextBox aura par exemple parmis ses événements :  » Change  » qui sera appelé chaque fois que le texte de la zone de texte est modifié, indépendamment de ce qui est modifiés. Voici une ligne de code C# qui défini la fonction  » radioButton1_CheckedChanged  » comme étant celle à appeler si l’événement  » CheckedChanged  » se produit pour le contrôle RadioButton1 qui n’est rien d’autre qu’un RadioButton :

this

.radioButton1.CheckedChanged +=

new

System.EventHandler(

this

.radioButton1_CheckedChanged);

Suite de l’article

Un peu de pratique maintenant !

Notre application

Quoi de plus sympathique à réaliser qu’un formidable hello world pour tester nos connaissances. Cependant nous prendrons garde à y rajouter certaines fonctions qui nous permettra d’utiliser les notions abordées un peu plus haut. Notre programme aura donc besoin des 5 contrôles que nous avons vu ci-dessus et nous demandera notre nom ainsi que notre langue : anglais ou français. Et en fonction de la langue sélectionnée, et après avoir cliquer sur le bouton  » OK « , noter application nous dira bonjour dans la langue sélectionnée.

Conception de notre solution

Avec Visual Studio .Net, nous ne parlons plus de Workspace mais de solution. Nous allons donc pour notre application créer une nouvelle solution Windows application en C# :

Puis nous validons avec Ok en laissant comme nom de projet WindowsApplication1.

Ensuite nous voyons apparaître notre fameux formulaire. C’est donc ici que nous allons designer notre application grâce à la boite à outils, si cette dernière n’est pas présente à l’écran, vous pouvez la faire apparaître en cliquant sur  » View  » puis  » Toolbox  » ou avec les touches Ctrl+Alt+X

Nous allons tout d’abord changer le nom de notre formulaire et l’appeler  » -== Hello World ==-« . Ceci se fait via la fenêtre Properties, en éditant le champ Text, noter également le nombre non négligeable de propriété modifiable comme par exemple le degrés de transparence (opacity) que vous pouvez éventuellement fixer à 90%.

Commençons maintenant à rajouter les différents composants de notre application. Nous commencerons par le Label dont nous fixerons la propriété Text à  » Votre nom :  » et nous irons également modifier propriété Font afin d’afficher notre texte en gras :

Rajoutons maintenant le TextBox qui servira à récupérer le nom de l’utilisateur, nous en profiterons également pour modifier la valeur par défaut de la propriété Text de ce contrôle par rien du tout :

Maintenant nous allons rajouter le bouton Ok de notre application et nous remplacerons la propriété Text de ce contrôle par  » Ok  » et nous ajouterons une image à ce bouton via la propriété Image. Une banque d’icônes est installée par défaut avec Visual Studio .NET dans le dossier : C :\Program Files\Microsoft Visual Studio .NET\Common7\Graphics\icons\..

N’oubliez pas cependant de mettre après la propriété ImageAlign à TopLeft afin d’éviter que le texte du bouton ne sois superposé avec l’image. Il ne manque désormais à notre interface graphique que deux éléments, le GroupBox et les deux RadioBox nous permettant de choisir notre langue. Commençons par rajouter le contrôle GroupBox pour lequel nous n’oublirons pas de fixer la propriété Text à  » Langue  » :

Rajoutons maintenant les deux RadioBox qui aurons respectivement des propriétés Text misent à  » English  » et  » Français  » ainsi que les propriétés Images définies avec les drapeaux américains et français :

Si vous compilez maintenant cette application vous remarquerez que les contrôles RadioBox ne sont ni l’un ni l’autre cocher par défaut. Nous allons pour changer cela, choisir le français par défaut en modifiant la propriété Checked, et en la mettant à true :

Voila notre application est d’un point de vue graphique complètement terminé, il vous suffit de compiler votre solution maintenant pour vous en rendre compte. Vous remarquerez que vous n’avez tapé aucunes lignes de codes jusqu’à maintenant, en fait, c’est Visual Studio .NET qui s’en ai chargé à votre place en interprétant vos actions sur le formulaire.

Cependant, pour donner vie à notre programme, il va quand même falloir y ajouter nous même du code. C’est-à-dire un code qui affiche  » Bonjour votre nom  » si français est sélectionné au moment ou l’on presse Ok, et  » Hi votre nom  » si c’est English qui est sélectionné.

Les variables string

Ce type de donné ressemble beaucoup au variable de type CString que les développeur C++ doivent connaître s’il ont déjà essayé de développer avec les MFC. En fait il s’agit d’un type de donné capable de stocker une chaîne de caractère comme le fait char en C et C++ à la différence que string possède une batterie de méthode permettant d’effectuer des opérations sur la chaîne stocker comme des concaténations ou des comparaisons. Pour plus d’informations sur ce type de donné, veuillez vous référer à la documentation MSDN de Visual Studio .NET. Il s’agit donc d’un type de choix pour stoker notre chaîne de caractère à afficher ( » Bonjour votre nom  » ou et  » Hi votre nom « ).

Evénement click du bouton ok

L’affichage du message ne doit se faire que quand on click sur le bouton Ok. Nous devons donc créer une fonction qui sera appelé quand on cliquera sur ce bouton, et nous y ajouterons le code d’affichage du message. Pour créer cette fonction et l’éditer, rien de plus simple : depuis le formulaire, double-cliquez sur le bouton Ok, et Visual Studio se chargera de la création et de la liaison de la fonction en question avec l’événement Click du bouton Ok. Vous devriez vous retrouver dans une fonction comme celle-ci :

Cette fonction (button1_Click) sera donc celle appelé si l’utilisateur click sur Ok. Commençons donc par y déclarer une variable buf qui stockera le message à contruire :

Ensuite nous initialiserons cette variable avec le texte  » Bonjour  » ou  » Hi  » en fonction de ce qui est cocher dans le GroupBox. Pour savoir si c’est Français ou English qui est sélectionné, il faut savoir que Visual Studio a dans son code généré, déclaré et lié un objet à chacun des contrôles ajouté dans le formulaire. Ainsi pour savoir si le Radiobox intitulé Français est sélectionné, il nous suffit de vérifier la propriété checked de l’objet relier à ce contrôle. Pour obtenir le nom de l’objet relié à notre contrôle, il nous suffit d’afficher les propriétés du contrôle à partir du formulaire, et relever la valeur de la propriété name, cette valeur est le nom de l’objet relié au contrôle dans le code source. Dans le cas de notre RadioBox intitulé  » Français « , l’objet s’appelle radioButton2 comme le montre la capture d’écran ci-dessous :

Maintenant pour initialiser notre variable buf en fonction du contrôle RadioBox sélectionné, il nous suffit de rajouter le code suivant :

Notez qu’on utilise l’opérateur d’indirection  » .  » pour accéder aux propriété de l’objet ( ex : radioButton2.Checked )

Maintenant nous devons récupérer le nom taper dans le contrôle TextBox, et le concaténer avec buf. L’opérateur de concaténation pour une variable de type string est  » += « , nous pouvons donc concaténer la formule de politesse avec le nom taper de la sorte :

Notez que textBox1 est le nom de l’objet relier au contrôle TextBox censé récupérer le nom. Afin de récupérer le texte taper dans ce contrôle nous nous référons à la propriété Text, toujours accessible via l’opérateur d’indirection  » .  »

Il ne nous reste plus qu’à afficher à l’écran le contenu de buf grâce à la fonction MessageBox.Show. Cette fonction prend 4 paramètres :

 

  • La chaîne de caractères à afficher
  • Le titre de la boite de dialogue qui affichera ce message.
  • Le type de boite de dialogue qui affichera ce message.
  • L’image à afficher à coter du message.

 

Ce qui nous amène donc à rajouter cette dernière ligne de code :

Voila notre solution est maintenant entièrement terminé, vous pouvez la tester et la manipuler comme bon vous semble !

Télécharger le code source de la solution