Accéder au contenu principal

Cour Csharp (c#)




Chapitre 1 :

Concepts fondamentaux de la programmation événementielle


1.   Introduction

L’objectif de ce module est de présenter les concepts fondamentaux de la programmation événementielle ainsi que les éléments nécessaires à une bonne prise en main de la plate forme de développement Microsoft .Net ainsi que des environnements classiques qui y sont dédiés.

2.   Concepts de la programmation événementielle

2.1. Définir les principes de la programmation événementielle

La programmation événementielle se différencie de la programmation classique par le fait suivant ainsi que les principes généraux qui en découlent.
En programmation classique (procédurale) une application est lancée et elle s’exécute linéairement à moins d’être interrompue par quelque chose d’exceptionnel.
A chaque étape de son exécution l’application garde le contrôle et décide si elle va interagir ou non avec l’utilisateur. A l’étape finale l’application termine et rend le contrôle au système d’exploitation.
Dans le cadre de la programmation événementielle l’application s’exécute puis elle donne le contrôle à l’utilisateur. Autrement dit elle n’effectue généralement aucune tâche exceptée celle d’attendre que l’utilisateur réagisse et la sollicite. Cette sollicitation se fait par le biais des événements.

2.1.1.                    Principes généraux de la gestion des événements


On procède à la création des principaux objets graphiques de l’application événementielle et on définit les méthodes de gestion des événements susceptibles d’intéresser chacun de ces objets.
On lance la boucle de gestion des événements. L’application se met en attente des événements. Elle n’effectue aucune tâche d’elle-même, l’application devient « esclave de l’utilisateur »

2.1.2.                    La boucle de gestion des événements


La boucle de gestion des événements se présente sous la forme d’une boucle infinie qui
-      Récupère les événements
-      Appelle les fonctions gestionnaires pour chaque objet


2.2. Définir la notion d’événement

Un événement c’est « quelque chose qui se produit » durant l’exécution d’une application. En programmation structurée et pour des environnements du type MS–DOS les interruptions systèmes donnent une idée assez proche de la notion d’événement.
Lorsque « quelque chose se produit » au cours de l’exécution de notre application, il faut que :
§  Que l’application soit informée que « quelque chose s’est produit »
§  Que l’application puisse réagir de façon adéquate à ce « quelque chose »
Les quelques exemples suivants sont des événements classiques gérés par la plupart des applications présentant des interfaces graphiques.
§  Appuyer ou relâcher un bouton de la souris
§  Appuyer ou relâcher une touche du clavier
§  Bouger la souris
§  La souris entre ou sort d’une fenêtre
§  La fenêtre a changé de taille
§  L’utilisateur a cliqué sur un menu
Un événement est parfois également appelé « message » qui est :
§  Envoyé à une application ciblée
§  Déclenché à chaque action élémentaire de l’utilisateur

2.3. Définir les procédures événementielles


Au niveau de la gestion des événements qui surviennent dans l’exécution d’une application on distingue deux types de méthodes ou procédures événementielles
  • Les procédures événementielles relatives à l’application d’un protocole non embarqué (application des techniques de base de la gestion événementielle)
  • Les techniques relatives à l’application d’un protocole embarqué (cas des plates formes de développement modernes comme Microsoft .Net Framework)

Le cas nous intéressant le plus est celui des protocoles embarqués, il demeure cependant très important de bien comprendre les deux principes

2.3.1.                    Procédures événementielles dans le cas d’un protocole non embarqué

Imaginons qu’on écrive une boucle de gestion d’événements pour des applicatifs non standard tels qu’un jeu vidéo. Le scénario d’utilisation ainsi que tous les objets figurant dans le jeu étant à l’entière discrétion du développeur un Framework pourrait difficilement gérer la boucle des événements, à ce moment là le développeur écrit un code similaire à ceci :

while (True) {
event = GetNextEvent()
switch(event->type) {
case EVENT_E1 sur window_W1: // pseudo-code
foo_E1_W1();
break;
case EVENT_E2 sur window-W2:
foo_E2_W2();
break;
......

En réalité la tâche est bien plus complexe car il faut prévoir tous les cas possible et prendre en compte les différents types d’objets graphiques susceptibles de réagir aux mêmes événements.

2.3.2.                    Procédures événementielles dans le cas des protocoles embarqués


Dans le cas des protocoles embarqués le principe utilisé est le suivant :
§  La boucle de gestion des événements est prédéfinie
§  Le contrôle du dialogue est embarqué dans les objets graphiques.

A ce moment, la détection des événements se fait via
§  Les fonctions de Callback
§  Les listeners
En Visual Basic .Net le mécanisme est implémenté au travers de procédures événementielles appelées gestionnaires d’événements

3.   Environnement de développement du langage utilisé :

3.1. Introduction

Nous, humains, communiquons avec un langage complexe. En effet, notre langage est composé de phrases, construites avec des mots qui sont eux-mêmes constitués de différentes lettres. Mais malheureusement pour nous, les ordinateurs, eux, ne comprennent que des 1 et des 0. Le problème est donc de savoir comment nous allons faire pour pouvoir communiquer avec eux, car notre but final est tout de même de programmer l’ordinateur afin d’obtenir ce que nous voulons de lui. Tout cela en gardant à l’esprit que programmer en binaire n’est pas une alternative envisageable.

3.2.  Nécessité d’un langage intermédiaire

C’est donc pour cette raison que l’on a inventé le langage de programmation : afin de pouvoir communiquer avec la machine dans un langage un temps soit peu compréhensible par l’humain, ce qui n’est de toute évidence pas le cas du langage binaire. Le langage de programmation est donc un langage à mi-chemin entre notre langage et celui de l’ordinateur. Grossièrement, C’est un langage qui est compréhensible à la fois par l’homme et par le processeur de la machine.
Une fois notre code écrit en langage de programmation, un logiciel appelé compilateur va se charger de le traduire en langage binaire comme indiqué sur le schéma ci-dessous. Le compilateur est une sorte de « traducteur » langage de programmation vers le langage  binaire.

3.3. Présentation du Framework .Net

Nous sommes aujourd’hui à la version 3.5 du Framework .NET (et bientôt 4.0). La première version exploitable de celui-ci est sortie en 2002 et celle-ci n’a pas cessé d’évoluer de même que son environnement de programmation dédié : Visual Studio. En effet la version 1 .1 est sortie en 2003 puis la 2.0 en 2005 la 3.0 en 2006 et la version actuelle 3.5 sortie en 2007. Chaque mise à jour apportant d’importantes nouveautés et améliorations.
Nativement, la plate-forme .NET fut crée pour Windows, mais celle-ci est désormais portable sur des systèmes Linux ou Unix, grâce à un projet intitulé MONO.

Le Framework .NET regroupe un ensemble d’outils pour le programmeur. En effet les technologies .Net vont nous permettre de programmer autant des applications console et WindowsForm que des services Web, des applications Windows mobile et bien d’autres.
Un des avantages du Framework .Net, c’est qu’il est multi-langages. C'est-à-dire que l’on va pouvoir programmer en VB.NET, en C#, en C++, en J# et aussi en d’autres langages compatibles. Nous allons voir comment l’architecture du Framework va nous permettre cela.

3.3.1.                    Le Common Language Specification

Nous allons voir ici le fonctionnement de la plateforme .NET grâce à un schéma simple.
Pour commencer on code dans un langage compatible .NET. La Common Language Specification (CLS) s’occupe, elle, de la compatibilité de chaque langage avec le Framework de sorte qu’en codant avec n’importe quel langage compatible, on aboutisse au même code intermédiaire. Chaque langage est donc compilé par son compilateur associé pour aboutir à un code intermédiaire : le MicroSoft Intermediate Language (MSIL).
Cette caractéristique est typique du Framework.NET, et elle n’est pas là par hasard. Bien évidemment, cette compatibilité multi-langages vise à faciliter la migration d’un langage de développement spécifique vers la plateforme .Net (exemple du Visual Basic et le VB.Net). Le processus de compilation est assez semblable au fonctionnement du langage JAVA. Notre code source est « Pré »compilé dans un langage intermédiaire et celui-ci sera interprété lors de l’exécution par une machine virtuelle qui le traduira en code natif. Cette « machine virtuelle » dans le Framework .Net, c’est la Common Language Runtime (CLR).

3.3.2.                    Common Language Runtime

La CLR a deux grandes fonctions : d’abord, elle s’occupe de l’interprétation du code à la volée. C'est-à-dire qu’elle va compiler le code MSIL en fonctions des besoins ce qui optimise les performances. Cela s’appelle la compilation « Just in Time » ou « JIT ». Grâce à cette méthode on va uniquement compiler du code « utile ». Et ensuite la Common Language Runtime va gérer la mémoire. Dotnet France Association 6 [Notions fondamentales du langage Csharp] [Date : 25/03/09]

3.4.  Qu’est ce que le C# ?

3.4.1.                    Un langage simple et performant pour .NET


C# est le langage par excellence de .Net, apparu en 2001. Ce langage est comme dit précédemment un langage de programmation orientée objet, étant un carrefour entre différent langage comme le Java, le C++ ou encore le Visual Basic, tout en restant un langage à part.
C’est un langage à typage fort, c’est à dire que le type des variables est fixé à la compilation et que celle-ci peut vérifier les erreurs de typage (à la différence du langage PHP par exemple). Le C Sharp est très polyvalent, Il permet de coder de simples applications consoles jusqu’à de gros programmes avec une multitude de fenêtres, en passant par les jeux.


Souvent, le langage C# a été comparé au java, pour qui, tout comme le C#, tout est objet. Cependant, le langage de .NET, de part ses amélioration au fur et à mesure de son existence, a su se forger son propre profil. En effet depuis sa parution, on est passé de la version 2.0 à 2.5, de 2.5 à 3.0 et enfin de la version 3.0 à 3.5, ayant dans chaque évolution bien entendu son nombre de nouveautés. De nouveaux mots clés sont ajoutés, de nouvelles sortes de classes et certaines syntaxes simplifiées… C’est donc au fil des années que ce langage devint de plus en plus efficace et plus facile d’accès que beaucoup d’autres langages orientés objet, ce qui fait aujourd’hui sa popularité.

4.   Les bases du C#

4.1.   Environnement de développement

Microsoft Visual studio 2008 est l’environnement de développement dédié à la plateforme .NET, son utilisation est donc ici plus que vivement conseillée. Toutefois les codes de C# présentés ici pourront également être écrits au bloc-notes puis compilés par un compilateur C# en lignes de commande.

4.2.   Installation de Visual studio 2008

L’installation du logiciel Visual studio 2008 est toute simple, sélectionnez le premier lien sur la première fenêtre d’installation et suivez les différentes étapes.

4.3.     Création d’un projet C#

Nous allons créer ici notre premier projet C# avec notre première application console. Lancer Visual Studio 2008 et dans le menu supérieur allez dans : File/New/Project comme indiqué sur la capture d’écran ci-dessous.


Puis, dans la fenêtre qui s’ouvre, on va choisir Visual C# dans le menu déroulant et « Console Application » et donner un nom à notre projet.





Chapitre 2 :

Présentation de l’Architecture Dot Net & Règles de réalisation d’une interface



1.         Présentation des composants d’une application événementielle

1.1.      Création d’un nouveau projet

Pour créer un nouveau projet, il faut suivre les étapes suivantes :
1.      Démarrez Visual Studio .NET.
2.      Dans le volet Projets récents, cliquez sur Créer : projet ….
Ou Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.
3.      Dans le volet Types de projets, cliquez sur Projets Visual C#. Dans le volet Modèles, cliquez sur Application Windows.
4.      Dans la zone Nom, tapez un nom de projet unique qui évoque l’utilisation de l’application.
5.      Dans la zone Emplacement, tapez le répertoire dans lequel enregistrer le projet ou cliquez sur le bouton Parcourir pour atteindre le répertoire voulu.
6.      Cliquez sur OK.
7.      Le Concepteur Windows Forms s’ouvre et affiche le formulaire Form1 pour le projet créé.

1.2.       Utilisation de l’explorateur de solutions

L’Explorateur de solutions permet de visualiser des fichiers et d’effectuer des tâches de gestion de fichiers à partir d’une solution ou d’un projet. Une solution .NET basée sur Visual Basic apparaît accompagnée de ses projets dans une liste hiérarchique qui contient des informations à jour sur l’état de la solution, des projets et des fichiers.
Une solution est un conteneur de projets et d’éléments de solutions qu’il est possible de compiler pour générer une application. Une solution contient habituellement un ou plusieurs projets apparentés.
Un projet est un conteneur au sein d’une solution. Il est utilisé pour gérer, créer et déboguer de façon logique les éléments de projet qui constituent une application.
Visual Studio .NET prend en charge de nombreux types de fichiers et extensions associées.
Pour ouvrir l’Explorateur de solutions : Dans le menu Affichage, cliquez sur Explorateur de solutions. La fenêtre qui le contient s’affiche dans le coin supérieur droit de la zone de développement. Vous pouvez la déplacer et la redimensionner en utilisant la fonctionnalité glisser-déplacer standard. Par défaut, l’Explorateur de solutions affiche uniquement certains des fichiers stockés dans le projet. Vous pouvez modifier l’affichage de façon à voir tous les fichiers de la solution.
Pour afficher tous les fichiers dans l’Explorateur de solutions : Dans la barre d’outils Explorateur de solutions, cliquez sur Afficher tous les fichiers. Cette option permet de visualiser les fichiers qui ont été créés manuellement ou au cours de la compilation. Il est possible de supprimer de façon définitive les projets qui ne sont plus utiles.
Pour supprimer des projets définitivement : Dans l’Explorateur Windows, cliquez avec le bouton droit sur le dossier qui contient la solution à supprimer et choisissez Supprimer.
Pour visualiser des fichiers dans l’Explorateur de solutions :
1.  Si l’Explorateur de solutions n’est pas déjà ouvert, dans le menu Affichage, cliquez sur Explorateur de solutions.
2.  Développez les n.uds de fichiers pour visualiser les fichiers.
Notez la présence des fichiers Program.cs et Form1.cs. Ces fichiers font partie de tous les projets Windows Forms.

1.3.     Exécution du projet dans l’environnement de développement

Cliquez sur le bouton Démarrer dans la barre d’outils standard. Vous pouvez également appuyer sur F5. Comme vous n’avez apporté aucune modification au code de démarrage du projet, un formulaire vierge apparaît lorsque le projet est exécuté.
Fermez le formulaire vierge et retournez dans l’environnement de programmation.

1.4.     Génération d’un fichier exécutable pour le projet

Dans le menu Générer, cliquez sur Générer NouvProjWindows. Lorsque vous générez un projet ou une solution, un fichier exécutable (.exe) est créé automatiquement dans le dossier du projet, dans un sous-dossier appelé bin.

1.5.       Exécution de l’application en dehors de l’environnement de développement

Dans le menu Démarrer, cliquez sur Exécuter et recherchez le fichier .exe. Ce fichier se trouve dans le dossier dossier_installation\Practices\Mod01\NouvProjWindows\bin.
En exécutant l’application en dehors de l’environnement de développement Visual Studio .NET, vous pouvez tester l’utilisation de l’application.

1.6.        Fermeture du projet et fermeture de Visual Studio .NET

1.  Dans le menu Fichier, cliquez sur Quitter.
2.  Lorsque vous êtes invité à enregistrer les modifications, cliquez sur Oui.

2.         Présenter les formulaires, les modules standards et les modules de classes

2.1                   Le concepteur Windows Form

Lorsque vous démarrez un projet dans Visual Basic .NET, le Concepteur Windows Forms s’ouvre en mode Design et contient le formulaire Form1 pour le projet. Vous devez placer des contrôles depuis la boîte à outils sur le formulaire pour créer l’interface utilisateur d’une fenêtre utilisée dans votre application.
Le formulaire par défaut contient le nombre minimal d’éléments utilisés par la plupart des formulaires : une barre de titre, une zone de contrôles et les boutons Agrandir, Réduire et Fermer.
§  Pour afficher un formulaire en mode Design
1          Dans l’Explorateur de solutions, double-cliquez sur le formulaire.
Ou
2          Dans l’Explorateur de solutions, sélectionnez le formulaire et cliquez sur le bouton Concepteur de vues dans la barre d’outils.

§  Editeur de code
Visual Studio .NET fournit un éditeur de code dans lequel vous pouvez écrire et gérer du code pour votre projet. Vous pouvez associer du code directement à un formulaire dans votre projet ou le placer dans un module de code séparé. Un éditeur de code distinct s’affiche pour chaque formulaire ou module du projet, ce qui facilite l’organisation, l’affichage et le déplacement dans le code.
L’éditeur de code contient deux listes déroulantes situées en haut de la fenêtre :
o  La liste Nom de la classe sur la gauche et la liste Nom de la méthode sur la droite.
o  La liste Nom de la classe contient tous les contrôles du formulaire correspondant. Si vous sélectionnez un nom de contrôle dans cette liste, la liste Nom de la méthode affiche tous les événements qui existent pour ce contrôle.
(Les événements sont les actions que le contrôle effectue et qui sont interprétées par l’application.) En utilisant parallèlement les listes Nom de la classe et Nom de la méthode, vous pouvez localiser et éditer rapidement du code dans votre application.

§  Pour ouvrir l’éditeur de code pour un formulaire
1.  Dans l’Explorateur de solutions, cliquez sur le formulaire dont vous voulez visualiser le code.
2.  Dans la barre d’outils Explorateur de solutions, cliquez sur le bouton Afficher le code.
- ou -
Dans le menu Affichage, cliquez sur Code.

3.         Règles de réalisation des interfaces

3.1.      Les principaux objets d’une interface graphique

Les principaux objets d’une interface graphique sont regroupés en ce qu’on appelle des contrôles graphiques eux même organisées en plusieurs catégories parmi lesquelles :
§  Les contrôles de base : zone de texte, menus, barre d’outils
§  Les contrôles de défilement
§  Les contrôles de dialogue : fenêtre de recherche de fichier, sauvegarde et récupération,…

3.1.1        Création d’une interface utilisateur

Lorsque vous créez une application, la première étape consiste à créer l’interface utilisateur. Dans Visual Basic .NET, il est possible de créer rapidement cette interface utilisateur en ajoutant dans un formulaire des contrôles qui se trouvent dans la boîte à outils.
ü  Pour ajouter des contrôles à un formulaire
1.  Si la boîte à outils n’est pas ouverte, dans le menu Affichage, cliquez sur Boîte à outils.
2.  Dans la boîte à outils, cliquez sur le contrôle à ajouter au formulaire et faites-le glisser vers l’emplacement de votre choix dans le formulaire.
ü  Pour déplacer et redimensionner des contrôles
1.  Pour déplacer un contrôle, sélectionnez-le et faites-le glisser vers l’emplacement de votre choix dans le formulaire.
2.  Pour redimensionner un contrôle, sélectionnez-le et faites glisser l’une des poignées de redimensionnement jusqu’à ce que le contrôle ait atteint la taille désirée, puis relâchez le bouton de la souris.

3.1.2     Définition des propriétés des contrôles

Les propriétés des objets se modifient en sélectionnant les objets voulus sur le formulaire et en changeant leurs valeurs dans la fenêtre Propriétés.
ü  Pour définir les propriétés dans la fenêtre Propriétés
1.  Si la fenêtre Propriétés n’est pas ouverte, dans le menu Affichage, cliquez sur Fenêtre Propriétés.
2.  Cliquez sur le contrôle pour lequel définir une propriété.
3.  Dans la fenêtre Propriétés, sélectionnez la propriété et affectez-lui la valeur souhaitée.

3.1.3     Ajout de code pour les contrôles

Après avoir défini les propriétés initiales des objets de l’interface utilisateur, vous pouvez ajouter du code qui s’exécute en réponse à certains événements.
Les événements se produisent lorsque différentes actions sont enregistrées pour un contrôle ou un objet. Par exemple, l’événement Click d’un bouton se produit lorsqu’un utilisateur clique sur le bouton à l’aide d’une souris.







Chapitre 3 :

Éléments de base de la programmation événementielle



1.   Eléments de base de la programmation événementielle

1.1     Propriétés, méthodes et événements

Les classes décrivent les propriétés, les méthodes et les événements qui constituent les objets, membres de la classe. Pour contrôler un objet, vous utilisez des propriétés, des méthodes et des événements.
Les propriétés sont les caractéristiques d’un objet telles que taille, couleur et texte. Les méthodes sont les actions qu’un objet peut accomplir. Close et Hide sont des exemples de méthode très courants pour un formulaire.
Les événements sont des actions, très souvent générées par un utilisateur, qui sont reconnues par un objet, par exemple : activation d’une touche, clic sur un bouton ou mouvement de la souris. Chaque formulaire ou contrôle dispose d’un ensemble d’événements particulier qu’il reconnaît. Les événements sont déclenchés lorsque certains aspects de l’objet changent. Par exemple, lorsqu’un utilisateur clique sur une souris, l’événement Click se déclenche.
Prenons l’exemple d’un poste de radio stéréo.

1.2      Création d’un formulaire

Dans Visual C#, un formulaire est une fenêtre utilisée dans votre application. Lorsque vous créez un nouveau projet d’application Windows, Visual C# vous fournit une fenêtre de conception où figure un formulaire. Le formulaire par défaut contient les éléments minimums utilisés dans la plupart des formulaires : une barre de titre, une case système et des boutons Réduire, Agrandir et Fermer.
Les applications requièrent généralement plusieurs fenêtres. Il faut ajouter un formulaire à votre projet pour chaque fenêtre que réclame votre application.
ü  Pour ajouter des formulaires à 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, pointez sur Ajouter et cliquez sur Ajouter un formulaire Windows.
3. Dans la boîte de dialogue Ajouter un nouvel élément, donnez un nom approprié au formulaire, puis cliquez sur Ouvrir.

1.3        Définir les propriétés d’un formulaire

Lors de la création de l’interface utilisateur d’une application Visual C#, 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.

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

2.   Contrôles de base 

Lors de la création de vos applications Windows Forms, vous allez disposer vos contrôles sur ce qu'on appelle une Form. Des contrôles sont en fait des éléments tels que des boutons, des zones de texte, des menus déroulants,... Tous ces contrôles vont devoir être placés sur une fenêtre qui va permettre de présenter l'application.
Une propriété est définie par un nom et une valeur. Chaque propriété va permettre de définir un comportement, une apparence... d'un contrôle. Par exemple, pour la form, nous avons une propriété qui va définir le texte affiché dans la barre de titre de celle-ci. Nous allons maintenant voir les principales propriétés d'une Windows Form.
La figure ci-dessous présente les différentes propriétés d’une Form :


Nous allons maintenant voir les propriétés les plus importantes de la fenêtre. La première de celle-ci est commune à tous les contrôles, c'est la propriété Name. Celle-ci va permettre de nommer notre fenêtre pour pouvoir l'utiliser dans le code.
Vous pouvez également modifier la couleur d'arrière-plan de la fenêtre en modifiant la propriété BackColor. Vous avez plusieurs choix pour ce qui est de cette couleur. Vous pouvez simplement choisir une couleur dans la partie Custom, ou alors choisir les couleurs définies comme couleurs systèmes. Ainsi, vous pouvez dire que la fenêtre aura comme couleur d'arrière plan celle définie pour les boutons, ou pour le texte,...
Vous pouvez également changer l'apparence du curseur de la souris lorsque celui-ci se trouve sur votre form en modifiant la propriété Cursor. Il est aussi possible de modifier la police des textes affichés dans votre fenêtre. Pour cela, il suffit de modifier la propriété Font en choisissant l'épaisseur, le style, la taille et la police souhaitée.
La propriété FormBorderStyle, quant à elle, va permettre de définir le format des bordures de la fenêtre. Si vous laissez cette propriété sur Sizabel, votre fenêtre pourra être redimensionnée par l'utilisateur. FixedSingle vous permet d'empêcher ce redimensionnement. Vous pouvez également choisir None pour cacher complètement la barre de titre.
Vous pouvez également cacher le bouton de maximisation de la fenêtre en allouant False à la propriété MaximizeBox et/ou le bouton de minimisation grâce à la propriété MinimizeBox. Vous pouvez aussi ne pas afficher la fenêtre dans votre barre des tâches en définissant la propriété ShowInTaskBar à False.
Une propriété intéressante est StartPosition. Celle-ci permet d'indiquer à quel endroit de votre écran votre fenêtre s'affichera lorsque celle-ci apparaîtra. Par exemple, la valeur CenterScreen permet de centrer la fenêtre au milieu de l'écran alors que la valeur CenterParent permet de centrer la fenêtre par rapport à sa fenêtre parent.
La propriété Text va permettre de définir le texte apparaissant dans la barre de titre de votre fenêtre et enfin, la propriétéWindowState permet de définir si votre application démarre avec la fenêtre maximisée (Maximized), minimisée (Minimized) ou normal (Normal).


2.1     Composant Label

2.2     Composant TextBox

2.3     Composant Button








Les Listes

1.      Le contrôle ListView :

De plus en plus puissant, le contrôle ListView permet d’afficher des listes multi colonnes, ou des listes avec icône ou case à cocher.

1.1   Liste avec sous éléments.

Ajouter un ListView nommé ListBox.
En mode conception (création) : La propriété View permet de déterminer l’aspect général du contrôle, elle peut prendre les valeurs :
§  Details : permet une liste avec sous éléments et titre de colonnes.
§  Liste utilise un ascenseur horizontal.
§  LargeIcon
§  SmallIcone
En mode programmation cela donne :           ListBox.View= View.Details
Utilisons le mode détails (Appelé mode Rapport)
Exemple : Faire un tableau de 3 colonnes, mettre les nombres de 1 à 100 dans la première, leur carré dans la seconde, leur cube dans la troisième.

1.2  Comment remplir les en-têtes de colonnes?

En mode conception, dans la fenêtre propriété du ListView, il y a une propriété Columns, le fait de cliquer sur le bouton d’expansion (…) ouvre une fenêtre, cliquer sur ‘Ajouter’ permet d’ajouter une colonne ; la propriété Text permet de donner un libellé qui apparaîtra en haut de la colonne. On peut ainsi nommer les 3 colonnes (« Nombre », « Carré », « Cube » dans notre exemple)
Par programmation on peut aussi créer des colonnes en utilisant par exemple le code suivant; cela donne:
listView1.Columns.Add("Nombre",100,HorizontalAlignment.Center);
listView1.Columns.Add("Carré", 100, HorizontalAlignment.Center);
listView1.Columns.Add("Cube", 100, HorizontalAlignment.Center);
Une autre manière est de créer une colonne et de l'ajouter:
            ColumnHeader Nombre = new ColumnHeader();
            Nombre.Text = "Nombre";
            Nombre.TextAlign = HorizontalAlignment.Center;
            Nombre.Width = 60;

            ColumnHeader Carre = new ColumnHeader();
            Carre.Text = "Carré";
            Carre.TextAlign = HorizontalAlignment.Center;
            Carre.Width = 60;

            ColumnHeader Cube = new ColumnHeader();
            Cube.Text = "Cube";
            Cube.TextAlign = HorizontalAlignment.Center;
            Cube.Width = 60;
           
            listView1.Columns.Add(Nombre);
            listView1.Columns.Add(Carre);
listView1.Columns.Add(Cube); 

1.3  Comment remplir le tableau?

Pour remplir le tableau, on pourrait, sur la ligne Items de la fenêtre des propriétés, cliquer sur … et rentrer les valeurs ‘à la main’. Ou  bien On le fait le plus souvent par programmation:
Pour chaque ligne il faut créer un objet ListViewItem: sa propriété Text contient le texte de la première cellule. On ajoute à cet objet des SubItems qui correspondent aux cellules suivantes. Enfin on ajoute le ListViewItem au contrôle ListView :
            for (int i = 1; i <= 100; i++){
                        ListViewItem nb = new ListViewItem();
             nb.Text = i.ToString();                                 // première cellule
                        nb.SubItems.Add((i * i).ToString());            // deuxième cellule
                        nb.SubItems.Add((i * i * i).ToString());       // troisième cellule
                        listView1.Items.Add(nb); }                          //Ajout de la ligne

 Autre manière: on veut créer un tableau pour gérer les stagiaires de la filière TDI1A. Pour cela on doit créer une listView après on spécifie les colonnes de la table stagiaires par les attributs (Matricule, Nom, Prénom).
listView2.View = View.Details;
listView2.Columns.Add("Matricule", 100, HorizontalAlignment.Left);
listView2.Columns.Add("Nom", 100, HorizontalAlignment.Left);
listView2.Columns.Add("Prénom", 100, HorizontalAlignment.Left);

Puis on rajoute les enregistrements de la table avec le code ci-dessus

ListViewItem mat = new ListViewItem("70911");
ListViewItem.ListViewSubItem nom  = new ListViewItem.ListViewSubItem(mat, "ALAOUI");
mat.SubItems.Add(nom);
ListViewItem.ListViewSubItem prenom = new ListViewItem.ListViewSubItem(mat, "SAID");
mat.SubItems.Add(prenom);
listView2.Items.Add(mat);

ou bien de manière plus simple:

ListViewItem stag = new ListViewItem();
stag.Text = "234511";
stag.SubItems.Add("KAMALI");
stag.SubItems.Add("Rachida");
listView2.Items.Add(stag);

Résultat :

1.4  Comment relire une cellule, récrire dans une cellule?

 Voyons d'abord comment on peut localiser une cellule:



ListBox.Items[0].SubItems[0].Text
ListBox.Items[0].SubItems[1].Text
ListBox.Items[0].SubItems[2].Text
ListBox.Items[1].SubItems[0].Text
ListBox.Items[1].SubItems[1].Text
ListBox.Items[1].SubItems[2].Text

 Les lignes sont contenues dans la collection Items : La première ligne est ListBox.Items[0], la seconde ligne: ListBox.Items[1]...
Les cellules sont contenues dans la collection Items[].SubItems :
La première cellule est ListBox.Items[0].SubItems[0] ou ListBox.Items[0].Text , la seconde ListBox.Items[0].SubItems[1].
§  Pour lire le texte de la seconde ligne seconde colonne et l’afficher dans une zone de texte :              TextBox1.Text = ListBox.Items[1].SubItems[1].    
§  Pour écrire dans une cellule:  ListBox.Items[1].SubItems[1]Text = "88"

1.5   Comment intercepter le numéro de la ligne qui a été cliquée par l’utilisateur (et l’afficher)?

private void listView2_SelectedIndexChanged(object sender, EventArgs e)
        {
            label1.Text = listView2.SelectedIndices[0].ToString();
        }
§  Si la propriété MultiSelect est à False il y a, bien sur, une seule ligne sélectionnée, sinon les lignes sélectionnées sont dans la collection SelectedIndices().
§  Si on veut récupérer le texte de la ligne sélectionnée, il faut utiliser : listView2.SelectedItems[0]
§  Si la propriété GridLine est à True, des lignes matérialisant les cases apparaissent.
§  Si la propriété CheckedBox est à True, des cases à cocher apparaissent.
listView2.LabelEdit = True autorise la modification d'une cellule de la première colonne (pour modifier, il faut cliquer une fois (sélection) puis une seconde fois (modification). Pour les colonnes suivantes, il n'y a pas d'édit.

1.6  Supprimer une ligne cliquée par l’utilisateur :

Pour supprimer une colonne sélectionnée par l’utilisateur, on utilise la propriété Remove()
listView2.Items.Remove(listView2.SelectedItems[0]) ;
Si la propriété CheckedBox est à True, on utilise le code suivant :
listView2.Items.Remove(listView2.CheckedItems[0]);

Les conteneurs

1.      Définir la notion de conteneur

Le container représente un objet visuel particulier dont l’objectif est de pouvoir contenir d’autres objets visuels. On peut regrouper des contrôles dans les catégories suivantes:
§  Les GroupBox.
§  Les Panels.
§  Les PictureBox.
§  Les TabControl.
§  Les SplitContainer.
§  Les LayoutPanel.

2.      Présenter les principes de placement des contrôles

2.1  GroupBox et Panel

Il est possible de regrouper des contrôles dans un container, on peut par exemple regrouper plusieurs RadioButton. Le container peut être un GroupBox ou un Panel.
GroupBox                 Panel avec AutoScroll = True et BorderStyle=Single
            Pour l'utilisateur, le fait que toutes les options soient regroupées dans un panneau est un indice visuel logique (Tous les RadioButton  permettrons un choix dans une même catégorie de données). Au moment de la conception, tous les contrôles peuvent être déplacés facilement ; si vous déplacez le contrôle GroupBox ou Panel, tous les contrôles qu'il contient sont également déplacés. Les contrôles regroupés dans un panneau ou un GroupBox sont accessibles au moyen de la propriété Controls du panneau.
Le contrôle Panel est similaire au contrôle GroupBox ; mais, seul le contrôle Panel peut disposer de barres de défilement et seul le contrôle GroupBox peut afficher une légende ou bien un titre.
La légende de la GroupBox est définie par la propriété Text.
Pour faire apparaître les barres de défilement dans le Pannel mettre
§  AutoScroll =True
§  AutoScrollMinSize =100;100
Dans un Panel, pour afficher des barres de défilement, attribuez à la propriété AutoScroll la valeur True.  La propriété BorderStyle détermine si la zone est entourée d'une bordure invisible (None), d'une simple ligne (FixedSingle) ou d'une ligne ombrée (Fixed3D).
Comment créer un contrôle Panel ?
Faites glisser un contrôle Panel de l'onglet Windows Forms de la boîte à outils jusqu'à un formulaire. Ajoutez des contrôles au panneau en les déposant dans le panneau. Si vous voulez mettre dans le panneau des contrôles existants, sélectionnez-les tous, coupez-les dans le Presse-papiers, sélectionnez le contrôle Panel et collez-les.

2.2  PictureBox

Le contrôle PictureBox peut afficher une image mais peut aussi servir de conteneur à d'autres contrôles. Retenons la notion de conteneur qui est le contrôle parent. 

2.3  TabControl

Ce contrôle permet de créer des onglets comme dans un classeur, onglets entièrement gérés par C#. Chaque page peut contenir d'autres contrôles.
En mode conception, en passant par la propriété TabPages, on ajoute des onglets dont la propriété Text contient le texte à afficher en haut (Ici: Page 1..). Il suffit ensuite de cliquer sur chaque onglet et d'y ajouter les contrôles.
En mode run les onglets fonctionnent automatiquement: cliquez sur Page 2 affiche la page correspondante (et déclenche l'événement Click de cet objet TabPage).
La propriété Alignement permet de mettre les onglets en haut, en bas, à droite, à gauche. 

2.4  SplitContainer

Permettant de créer facilement une séparation déplaçable entre 2 zones.
On met le SplitContainer, dans les 2 zones on met par exemple 2 textbox. Il faut mettre la propriété Dock de ces 2 textbox à Fill. En mode Run, cela marche : si je déplace la zone de séparation centrale, cela agrandit un textbox et diminue le second.
§  Margin  indique la largeur de la séparation.
§  Orientation permet une séparation horizontale ou verticale. 

2.5  LayoutPanel 

Permettent de positionner les contrôles dans une Form en mode conception. On ne les voit pas en mode Run.
FlowLayoutPanel: Place les contrôles à droite du précédent, passe 'à la ligne' si nécessaire, c'est génial pour créer plusieurs lignes de label, TextBox, Bouton:
TableLayoutPanel: On crée un tableau de panel, puis on met les contrôles dans les cellules:

2.6   Groupes de contrôles en VB .Net

Exemple: 3 cases à cocher permettent de colorer un label en vert rouge ou bleu. Comment gérer les évènements?
On peut écrire 3 routines complètes pour chaque case à cocher. Il est aussi toujours possible dans chacune des 3 procédures CouleurX.checkedChanged de vérifier si la case est cochée et de modifier la couleur.
C'est plus élégant d'avoir une procédure unique qui, en fonction de la case à cocher qui a déclenché l'évènement, change la couleur.
On désire donc parfois que l'évènement de plusieurs contrôles différents soit dirigé sur une seule et même procédure.

Exemple : Si j'ai une interface utilisateur avec 20 Textbox, comment modifier la couleur de fond des 20 Textbox?
(En VB6 on créait un groupe de contrôle, cela n'existe plus en VB.net!!)

Solution 1
TextBox1.BackColor= Color.Red
TextBox2.BackColor= Color.Red
TextBox3.BackColor= Color.Red
.....  !!!!!! Fastidieux

Solution 2
Mettre les 20 TextBox dans un Panel (invisible); la collection Controls du Panel contient tous les contrôles contenus  dans le panel, on utilise cette collection pour atteindre tous les textbox:
private void button1_Click(object sender, EventArgs e){
            int i;
            for (i = 0; i < groupBox1.Controls.Count; i++)
                groupBox1.Controls[i].BackColor = Color.Red;
        }
Ou
private void button2_Click(object sender, EventArgs e){
            int i;
            foreach (TextBox txt in groupBox1.Controls)
                txt.BackColor = Color.Red;   
        }
S'il n'y a pas que des TextBox dans le Panel et qu'on ne veut modifier que les TextBox:
private void button2_Click(object sender, EventArgs e){
            int i;
            foreach (Control ctrl in groupBox1.Controls)
            {
                if (ctrl.GetType() == typeof(TextBox))
                       ctrl.BackColor = Color.Red;
            }
       

Utiliser les barres d’états et barre d’outils, les menus principaux et contextuels

1.      Introduction :

Les menus, les barres d’état et les barres d’outils permettent d’offrir des fonctionnalités aux utilisateurs ou de leur donner des informations importantes dans votre application. Les menus contiennent des commandes, regroupées selon un thème commun. Les barres d’état indiquent l’état de l’application ou fournissent des informations à propos de l’entité de l’application qui a le focus, comme une commande de menu. Les barres d’outils utilisent des boutons destinés à faciliter l’accès aux commandes fréquemment utilisées.

2.      Création de menus

Si vous voulez que votre application fournisse diverses commandes aux utilisateurs, les menus constituent un moyen pratique et cohérent de regroupement des commandes, permettant un accès facile. En outre, vous pouvez utiliser les touches d’accès rapide et les touches de raccourci afin de rendre la navigation dans les menus plus aisée pour les utilisateurs expérimentés de votre application.
Ce chapitre décrit comment créer des menus en vue de fournir un ensemble groupé de commandes aux utilisateurs.
Ce chapitre inclut les rubriques et activités ci-dessous :
§  Présentation multimédia: Création de menus
§  Terminologie des menus
§  Principes de création des menus
§  Création d’un menu
§  Modification des éléments de menu
§  Amélioration de votre menu
§  Application pratique : Création d’un menu

3.      Terminologie des menus

Un système de menu se compose généralement de plusieurs éléments. Le tableau ci-dessous décrit les éléments de menu d’une interface utilisateur classique, telle que celles utilisées par les applications Windows

4.      Principes de création de menus

L’objectif d’un menu est de rendre l’utilisation de votre application simple et intuitive. Les principes standards ci-dessous relatifs à la création des éléments de menu vous aideront à rendre votre menu plus intuitif et plus utile.
Le tableau suivant indique les principes de création des menus :

5.      Création d’un menu

Vous pouvez créer un menu dans un Windows Form en ajoutant un contrôle MainMenu au formulaire, au moment du design, à partir de la boîte à outils.
Vous pouvez ensuite créer les éléments de menu et sous-menus de votre menu à l’aide du Concepteur de menus. Lorsque la structure de votre menu a été créée, vous pouvez ajouter des fonctionnalités aux éléments de menu.
5.1  Pour ajouter un menu et des éléments de menu à un formulaire

1.      Dans le Concepteur Windows Forms, ouvrez le formulaire auquel vous souhaitez ajouter un menu.
2.      Dans la boîte à outils, double-cliquez sur le contrôle MainMenu. Un menu est ajouté au formulaire. Le menu affiche le texte « Tapez ici. »
3.      Cliquez sur le texte Tapez ici, puis tapez le nom de l’élément de menu souhaité afin de l’ajouter au menu.
4.      Le nom que vous tapez apparaît en tant que propriété Text de l’élément de menu. Par défaut, le contrôle MainMenu ne contient pas d’éléments de menu, de telle sorte que le premier élément de menu ajouté au menu devient l’en-tête du menu.
5.      Pour ajouter un autre élément de menu, cliquez sur une autre zone Tapez ici dans le Concepteur de menus.
a.       Cliquez sur la zone à droite de l’élément de menu actuel pour ajouter un sous-menu. Vous ne pouvez pas ajouter un sous-menu à un en-tête de menu.
b.      Cliquez sur la zone en dessous de l’élément de menu actuel pour ajouter un autre élément au même menu

L’ajout de code à l’événement Click de l’élément de menu permet d’ajouter des fonctionnalités aux éléments de menu. L’événement Click se produit lorsqu’un utilisateur clique sur l’élément de menu, lorsqu’un utilisateur sélectionne l’élément à l’aide du clavier et appuie sur ENTRÉE, ou lorsqu’un utilisateur clique sur une touche d’accès rapide ou une touche de raccourci associée à l’élément de menu.

5.2  Pour ajouter une fonctionnalité à l’élément de menu
1.      Dans le Concepteur de menus, cliquez sur l’élément de menu auquel vous voulez ajouter une fonctionnalité.
2.      Dans la fenêtre Propriétés, modifiez la propriété Name de l’élément. Renommez l’élément. Utilisez la même convention d’affectation de noms pour tous les éléments du menu. (Par  exemple, affectez l’élément de menu Open du nom OpenItem.)
3.      Double-cliquez sur l’élément de menu pour ouvrir l’événement Click d’un gestionnaire d’événements.
4.      Écrivez le code pour le gestionnaire d’événements.

6.      Modification des éléments d’un menu

Après avoir créé votre menu, vous pouvez aisément le modifier en déplaçant, en supprimant, en éditant, en désactivant ou en masquant des éléments.

1.1    Pour déplacer un élément de menu

Dans le Concepteur de menus, cliquez sur l’élément de menu et déplacez-le vers son nouvel emplacement. Vous pouvez placer l’élément au sommet du menu ou entre d’autres éléments de menu, ou l’ajouter en tant que nouveau sous-menu d’un élément existant.

1.2  Pour supprimer un élément de menu

Dans le Concepteur de menus, cliquez avec le bouton droit sur l’élément de menu, puis cliquez sur Supprimer. La propriété Text de l’élément de menu définit le nom qui sera visible par les utilisateurs. Lorsque vous utilisez le Concepteur de menus, vous définissez la propriété Text pour chaque élément à l’occasion de la création des éléments de menu.

1.3  Pour modifier la propriété Text d’un élément de menu

Dans le Concepteur de menus, cliquez sur l’élément de menu pour sélectionner le nom, puis tapez le nouveau nom.
La propriété Name de chaque élément est définie dynamiquement par le Concepteur de menus. Le Concepteur de menus utilise le système d’affectation de noms MenuItemX, où X est un nombre représentant l’ordre dans lequel l’élément de menu a été créé. Le Concepteur de menus de Microsoft Visual Studio® contient un Éditeur de noms permettant de modifier la propriété Name des éléments de menu que vous créez

1.4  Pour modifier la propriété Name des éléments de menu à l’aide de l’Éditeur de noms

1.      Cliquez avec le bouton droit n’importe où dans le Concepteur de menus, puis cliquez sur Modifier les noms. Le Concepteur de menus passe en mode d’édition de noms, et le nom d’un élément de menu apparaît à côté du texte spécifié dans la propriété Text.
2.      Modifiez la propriété Name à la valeur souhaitée.
3.      Pour quitter le mode d’édition de noms, cliquez avec le bouton droit n’importe où dans le Concepteur de menus, puis cliquez à nouveau sur Modifier les noms.

Les éléments de menu sont activés par défaut lors de leur création. La désactivation des éléments de menu en réponse à l’activité de l’utilisateur est un moyen de limiter le nombre de commandes accessibles. Pour désactiver un élément de menu, utilisez la propriété Enabled de l’élément de menu.

1.5  Pour désactiver un élément de menu

1.      Dans le Concepteur de menus, cliquez sur l’élément de menu que vous voulez désactiver.
2.      Dans la fenêtre Propriétés, définissez la propriété Enabled à la valeur False. Vous pouvez désactiver un élément de menu au moment de l’exécution à l’aide du code suivant, où MenuItem1 est le nom de l’élément de menu que vous voulez désactiver :
MenuItem1.Enabled = False
Le masquage des éléments de menu est un moyen permettant de contrôler l’interface utilisateur de votre application et de limiter les commandes accessibles. Souvent, vous voudrez masquer la totalité d’un menu lorsque tous les éléments de ce menu sont inaccessibles. Cela a l’avantage de limiter au maximum les distractions des utilisateurs.
Notez qu’il est important à la fois de masquer et de désactiver le menu, car le masquage seul du menu n’empêche pas d’accéder à une commande de ce menu par le biais d’une touche de raccourci.

1.6  Pour masquer un élément de menu

1.      Dans le Concepteur de menus, cliquez sur l’élément de menu que vous voulez masque.
2.      Dans la fenêtre Propriétés, définissez la propriété Visible à la valeur False

7.      Améliorer votre menu

Vous pouvez ajouter quatre types d’amélioration à un menu afin de fournir plus d’informations aux utilisateurs :
§  Les coches indiquent si une fonctionnalité est activée ou désactivée (par exemple si une règle est affichée le long de la marge d’une application de traitement de texte) ou indiquent lequel des fichiers d’une liste est affiché (comme dans un menu Fenêtre).

§  Les touches de raccourci sont des commandes clavier utilisées pour accéder aux éléments de menu au sein d’une application.

§  Les touches d’accès rapide permettent de naviguer dans les menus à l’aide du clavier. Pour activer le menu ou l’élément de menu souhaité, appuyez sur ALT et sur la touche d’accès rapide soulignée.

§  Les barres séparatrices permettent de grouper les commandes apparentées d’un menu et de rendre celui-ci plus lisible.

7.1  Pour ajouter une coche à un élément de menu

Dans le Concepteur de menus, cliquez sur l’élément de menu, puis cliquez sur la zone à gauche de l’élément de menu. Une coche apparaît, indiquant que la propriété Checked a été définie sur True.
Ou :
1. Dans le Concepteur de menus, cliquez sur l’élément de menu.
2. Dans la fenêtre Propriétés, définissez la propriété Checked à la valeur True.
                                            
La propriété RadioCheck fonctionne conjointement avec la propriété Checked. Lorsque la propriété RadioCheck a la valeur True, un petit point (.) est affiché à côté d’un élément de menu coché au lieu d’une coche ().

7.2  Pour affecter une touche de raccourci à un élément de menu

1. Dans le Concepteur de menus, cliquez sur l’élément de menu.
2. Dans la fenêtre Propriétés, définissez la propriété Shortcut à l’une des valeurs figurant dans la liste déroulante.

7.3  Pour affecter une touche d’accès rapide à un élément de menu

Lorsque vous définissez la propriété Text de l’élément de menu (dans la fenêtre Propriétés, dans le Concepteur de menus ou à l’aide de code), tapez une esperluette (&) devant la lettre que vous voulez désigner comme touche d’accès rapide.
Par exemple, si vous tapez &Fichier pour la propriété Text d’un élément de menu, celui-ci apparaîtra comme suit : « Fichier ». De même, F&ormat provoquera l’apparition de l’élément de menu « Format ».
Pour accéder à un élément de menu, appuyez sur ALT pour placer le focus sur la barre de menus et appuyez sur la touche d’accès rapide du nom du menu. Lorsque le menu s’ouvre et affiche ses éléments ainsi que les touches d’accès rapide, appuyez sur la touche d’accès rapide de l’élément de menu souhaité pour l’activer.

7.4  Pour ajouter une barre séparatrice à un élément de menu

Dans le Concepteur de menus, cliquez avec le bouton droit à l’endroit où vous voulez placer la barre séparatrice, puis cliquez sur Insérer un séparateur.
Ou, lorsque vous définissez la propriété Text de l’élément de menu (dans la fenêtre Propriétés, dans le Concepteur de menus ou à l’aide de code), tapez un tiret (.) pour faire de cet élément de menu une barre séparatrice





Realisation d une Application Gestion Stagiaire   Telecharger Le pdf

Menu.pdf



------------------------------

Realisation d une Application Gestion Cyber Telecharger Le pdf


APPLICATION2.pdf
------------Solution  Proposee

Realisation d une Application 3 Le pdf


APPLICATION 3.pdf
------------------------------
------------------------------

serie evnementiel(examen de 2012 )3 Le pdf


serie 1 Evenementiel.pdf
------------------------------

Resume de Cour Telecharger Le pdf


Cour Programmation evenementiel.pdf

Posts les plus consultés de ce blog

video sur une application simple native en android

Best Website Builders Sorted by Popularity

46 Best Website Builders Sorted by Popularity If you're looking for a tip on how to create a website with minimum effort, you can try using tools like a free website builder. It’s crazy how many websites exist on the web at present times. The variety and versatility of websites are always changing and growing. We can’t imagine a person without having a personal website or a website for his businesses and activities. But there are still individuals who don’t have one. There are lots of on- and offline solutions for novices and those who want to showcase something new - website builders. What is a website builder? Website builders are the right choice for people with no programming experience and limited time and budget. But sometimes even professionals can gain access to these tools, because the majority of them gives a visual over a website and let their users create websites as fast as they can. Modern top website builders have a plenty of modern functionaliti

easy drag-and-drop website builder

WINDOWS MAC LINUX WEB IPHONE ANDROID PRODUCTIVITY DEVELOPMENT GAMES SOCIAL BUSINESS Lists Sign up Login Crowdsourced software recommendations Which app do you want to replace? Find apps 32 Like Mobirise Create cutting-edge, beautiful websites that look amazing on any devices and browsers.  Created by Mobirise Website Builder Free   Open Source   Mac OS X   Windows   Android     Mobirise - is a super easy drag-and-drop website builder. Drop the blocks you like into your page, edit content inline and publish - no technical skills required. Develop bootstrap-based, fully responsive sites that look amazing on any devices and browsers. Preview how your website will appear on smartphones, tablets and desktops directly in the visual editor. Free for commercial and personal use. Download for Windows, Mac, Android. Boost your ranking - Sites made with Mobirise are 100% mobile-friendly according t