• Aucun résultat trouvé

Les «contrôles personnalisés dérivés»

N/A
N/A
Protected

Academic year: 2022

Partager "Les «contrôles personnalisés dérivés»"

Copied!
5
0
0

Texte intégral

(1)

Les «contrôles personnalisés dérivés»

Texte relatif au projet «TP3A»

La première partie du TP3 consistera à créer un contrôle autonome dérivé d'un ComboBox, un

«Analyseur» de phrases qui permettra à l'utilisateur d'entrer une phrase dans la zone de texte du contrôle, puis en tapant la touche <Entrée> d'obtenir dans le Combo la liste alphabétique des mots qui constituent celle-ci.

Une fois ce contrôle développé et compilé (sous forme d'un fichier «dll» (Dynamic Link Library), il pourra être inclus sur une nouvelle feuille (presque) comme s'il s'agissait d'un contrôle interne de VB.NET.

Étape 0 : Fonctionnement du contrôle

Dans le dossier «TP3\TP3A\Testing», vous trouverez un fichier «Exemple_TP3A.exe» qui contient une petite application qui utilise un contrôle dérivé. Si vous essayez de lancer ce programme, vous obtiendrez une erreur d'exécution puisque le «contrôle» en question ne s'y trouve pas. Faites glisser le fichier «MonCombo.dll» qui se trouve dans «TP3\TP3A» jusque dans le dossier «Testing» et le programme «Exemple_TP3A.exe» pourra s'exécuter.

Tapez un texte quelconque dans le «Combo» qui s'y trouve. Vérifiez que la liste déroulante est vide. Puis faites <Entrée> et faites dérouler la liste de nouveau : les mots du texte s'y retrouvent en ordre croissant. Le contrôle de type ComboBox qui s'y trouve est basé sur ce modèle mais comporte en plus une méthode qui place les mots du texte dans la liste déroulante. C'est ce contrôle que vous créerez dans cette première partie du TP3.

Étape 1 : Projet «Contrôle dérivé»

Sur votre disque de travail (R: dans les salles de la DESI ou local sur un poste autre), créez à un endroit approprié (dossier IFT1175 par exemple) un dossier «TP3». Placez-y ensuite les dossiers «TP3A» et «TP3B». Lancez VB.NET et cliquez sur «Nouveau projet». Une fois dans la boîte de dialogue des nouveaux projets, choisissez «Bibliothèque de contrôles Windows»

dans la liste des modèles (en haut),. tapez le nom «MonCombo» comme nom de projet et naviguez sur votre disque de travail pour choisir le dossier «TP3A». Puis validez pour construire le projet qui sera placé dans le dossier «MonCombo» de votre dossier «TP3A» à l'endroit choisi. Une fois votre projet terminé (parties A et B) vous n'aurez qu'à zipper et remettre le dossier «TP3» qui contiendra vos deux exercices.

VB vous offre une surface de travail semblable à celle d'une feuille, mais sans barre de titre, pour y placer des contrôles, mais comme vous allez créer un contrôle dérivé d'un ComboBox, vous n'en aurez pas besoin puisque vous utiliserez la «forme graphique» de celui-ci.

(2)

Enfin, dans la fenêtre «Explorateur de solutions», changez le nom du fichier

«UserControl1.vb» par «Analyseur.vb». Si vous retournez dans la section «Design» de votre contrôle, vous observerez que vous ne voyez plus celui-ci (un message vous explique pourquoi) et donc, que vous ne pouvez plus changer son aspect graphique.

Dans le menu contextuel du projet «MonCombo», sélectionnez [Générer] pour compiler le contrôle et le rendre accessible dans le dossier «Bin» sous le nom «Analyseur.dll».

Étape 2 : Projet Test du contrôle dérivé

Comme vous devrez éventuellement tester votre contrôle, vous pouvez tout de suite créer un projet de vérification. C'est ce que permet une «solution». En effet, il est possible d'ouvrir plusieurs projets à l'intérieur de la même solution.

Entrez la commande [Fichier], [Ajouter un projet], [Nouveau projet] et (ATTENTION) sélectionnez un projet de type «Application Windows». Donnez-lui un nom significatif (par exemple, MonTest, et laissez-le dans le dossier suggéré («TP3A»). Validez. Votre dossier

«TP3A» contient maintenant les deux sous-dossiers «MonCombo» et «MonTest».

Utilisez le menu contextuel (bouton droit de la souris) du nouveau projet (fenêtre

«Explorateur de solution») pour définir ce projet comme [Projet de démarrage]. Il est important que ce soit CE projet qui appelle l'autre et non l'inverse.

Pour utiliser un contrôle comme ... un contrôle, on doit l'insérer dans la liste des contrôles de la boîte d'outils de VB.

Cliquez sur l'onglet «Mes contrôles utilisateurs» de la boîte à outils pour y placer votre contrôle parmi la liste des contrôles accessibles. Le choix de cet onglet parmi les autres n'est pas une obligation mais simplement un choix permettant de l'identifier plus facilement.

Dans le menu contextuel de la surface de cette section (Mes contrôles utilisateurs), sélectionnez [Ajouter/Supprimer des éléments]. Assurez-vous que l'onglet «Composants .NET...» est bien sélectionné. Cliquez sur [Parcourir] pour naviguer dans vos dossiers et retrouver le fichier «...TP3A\MonCombo\Bin\ MonCombo.dll».

De retour dans la boîte de dialogue, vérifiez que le contrôle «Analyseur» contenu dans le fichier DLL (Assembly) «MonCombo» est bien coché et validez pour le placer sur la boîte à outils. VB le placera dans la section active de la boîte à outils. Vous pouvez dorénavant utiliser ce contrôle dans tous vos futurs projets, jusqu'à ce que vous l'enleviez de la liste. Il fait maintenant partie de vos outils de travail.

Placez un contrôle «Analyseur1» sur votre feuille et examinez ses propriétés : elles sont semblables à celles des ComboBox standard. Il en va de même des méthodes et des événements. Remarque au passage que la propriété «Sorted» est à «False» par défaut.

(3)

Étape 3 : Ajoutez les membres de base au contrôle dérivé

L'ajout de propriétés, méthodes et événements se fait de la même manière que pour les classes d'objets. Voici comment devra fonctionner votre Analyseur.

- L'utilisateur pourra entrer du texte dans la zone de texte du contrôle, puis quand il tapera sur la touche <Entrée>, le contrôle videra sa liste s'il y a lieu, puis il analysera le contenu de la phrase et placera les mots dans la liste en ordre alphabétique.

- Une méthode «Analyser» sans paramètre pourra lancer l'analyse par programmation.

- Le contrôle devra toujours avoir la propriété «Sorted» placée à True.

- Les autres propriétés issues du ComboBox seront gardées telles quelles.

- Un événement «AnalyseFaite» préviendra le développeur que l'utilisateur a entré un texte et en a fait l'analyse.

Revenez à votre «Analyseur.vb» et affichez-le en mode «Design» (double-cliquez sur

«Analyseur.vb» si la table de propriété n'affiche pas ses propriétés). Placez sa propriété Sorted à True. [Générez] de nouveau (menu contextuel de «MonCombo») le contrôle pour mettre à jour le «dll».

Revenez à votre projet test (feuille «Form1») et observez que la propriété «Sorted» est maintenant à True par défaut, mais que vous pouvez encore la changer pour False.

Alors, pour empêcher l'utilisateur de changer la valeur de cette propriété, placez le curseur dans la page de code du contrôle (Analyseur.vb) et, sous le code «généré par le concepteur», tapez la ligne suivante :

Public Shadows Property Sorted() As Boolean <Entrée>

VB créera votre en-tête de propriété et les procédures «Get» et «Set». Dans la section «Get»

de la procédure, placez simplement «Return MBase.Sorted» et dans la section «Set», placez

«MyBase.Sorted() = True». La clause «Shadows» de la déclaration de la propriété occulte l'accès à la propriété du contrôle de base, c'est-à-dire du ComboBox sous-jacent. Si vous retournez à votre feuille après avoir généré de nouveau votre contrôle, vous verrez que la propriété Sorted ne peut plus être placée à False.

«L'analyse» du texte entré sera enclenchée lorsque l'utilisateur tapera <Entrée> au clavier.

Donc, c'est l'événement «KeyPress» du ComboBox qu'il faudra «intercepter». Dans les listes d'événements au haut de la page de code de votre contrôle, sélectionnez à gauche «(Analyseur events)» et à droite «KeyPress» pour obtenir la structure du traitement de l'événement.

Dans cette procédure, l'objet «e» possède deux propriétés essentielles : KeyCode (de type Char) représente le caractère (graphique ou contrôle) entré par l'utilisateur (que l'on ne peut pas modifier) et Handled qui est un booléen permettant de «bloquer» le traitement ultérieur du caractère (équivaut à mettre KeyAscii à 0 en VB6). Par ailleurs, la classe «Keys» de l'espace de nom «System» contient une énumération (codes entiers) des caractères ASCII représentés sur les clavier, incluant par exemple «Keys.Tab» (#9), «Keys.Return»(# 13),

(4)

On peut donc écrire le «traitement» du caractère <Entrée> comme suit :

1) Private Sub Analyseur_KeyPress(ByVal ...

2) Dim stMot As String, MaColl As Collection = New Collection

' «e» contient les paramètres incluant le caractère tapé

' Comme «Color», «DateAndTime» et autres,

' «Keys» est une liste de codes numériques des caractères 3) If Asc(e.KeyChar) = Keys.Return Then ' C'est un <Entrée>

4) MyBase.Items.Clear() ' On vide la liste 5) Call subAnalyser(MyBase.Text, Macoll)

' On place les mots de la collection dans le combobox 6) For Each stMot In Macoll

7) MyBase.Items.Add(stMot.ToLower) ' En minuscules 8) Next

9) MaColl = Nothing

10) e.Handled = True ' Équivaut au «KeyAscii = 0) de VB6 11) End If

12) End Sub

Ici, ligne 3, on vérifie si le code tapé est le bon ([Entrée] correspond à «Keys.Return). Si oui, on commence par «vider» la liste des entrées du ComboBox (on y réfère avec MyBase), puis on appelle (ligne 5) une simple procédure locale «subAnalyser» qui reçoit en premier paramètre le texte présent dans la propriété Text du contrôle ComboBox représenté par

«MyBase» et qui renvoie en deuxième paramètre une collection (MaColl définie en ligne 2) contenant chacun des mots du texte. Cette procédure appelle à son tour une autre procédure locale Extraire laquelle appelle une fonction SiLettre. N'oubliez pas que ces énoncés se trouvent dans le fichier TP3ATexte.doc avec l'exécutable modèle. Vous y retrouverez les opérations standard sur l'extraction des caractères dans une chaîne en VB.NET (qui reprennent à leur manière les procédures équivalentes de VB6).

Une fois obtenue, dans l'objet «MaColl», la liste des mots constituant la phrase, il suffit (lignes 6-8) de les ajouter (en minuscules) au ComboBox et ils seront automatiquement classés en ordre alphabétique.

Ensuite on ajoute une méthode «Analyser» (Public Sub) qui reprend simplement la partie commune de la procédure «KeyPress» précédente. (On pourrait bien sûr placer la partie commune dans une seule procédure particulière mais bon!...)

Public Sub Analyser() Dim stMot As String

MyBase.Items.Clear() ' On vide la liste Call subAnalyser(MyBase.Text, Macoll)

' On place les mots de la collection dans le combobox For Each stMot In Macoll

(5)

Dernière opération avant de passer au test du contrôle : avertir le programme qui utilisera le contrôle que l'opération d'analyse a été traitée et donc que «l'Analyseur» contient la liste des mots de la phrase pour qu'il puisse décider de la suite des opérations. On place d'abord

«Public Event AnalyseFaite()» devant les procédures, puis on place le «RaiseEvent AnalyseFaite» à la fin de la boucle «Items.Add(stMots)» des deux procédures (Keypress et Analyser).

Avant de vérifier votre contrôle, il ne vous reste qu'à le compiler (Générer) de nouveau.

Étape 4 : Vérifier le contrôle.

Sur votre feuille du projet exécutable, où vous avez déjà placé le contrôle «Analyseur1», ajoutez un bouton «btnQuitter» et un bouton «btnAnalyser» avec les textes appropriés.

Agrandissez aussi la largeur de votre Analyseur. Le test est très simple : vous pouvez en tout temps entrer du texte dans le contrôle et visualiser sa liste de mots. Elle devrait être vide ou contenir les derniers items qui y ont été placés.

Puis vérifiez que si vous faites <Entrée>, les mots du texte peuvent se déployer dans la liste, ce que vous pouvez vérifier sur le champ en cliquant sur le bouton de la zone de texte du contrôle.

Pour vérifier la méthode, il suffit d'entrer du texte dans le contrôle (sans faire <Entrée>) puis d'appeler la méthode «Analyseur1.Analyser()» dans la procédure «Click» du bouton de commande. Vérifiez le résultat.

Enfin, pour vérifier l'événement (Analyseur1_AnalyseFaite), programmez-le pour afficher le

"Texte traité" dans un MsgBox. Le message devra apparaître à chaque lancement de l'analyse.

Finalement utilisez la commande «Me.Close()» pour mettre fin au programme.

Fin de la partie A.

Références

Documents relatifs

- Pour modifier l'ordre des éléments de la liste, cliquer sur l'élément à déplacer dans le champ Liste, puis cliquer sur une des flèches ou à droite de la liste.. - Pour

Lorsqu'on appuie sur le bouton, le texte erit par l'utilisateur dans la premi ere.. zone de texte sera opi e dans

Vous vous interrogerez sur le traitement de la scène du meurtre (scène 20) Dans un premier temps, vous définirez les enjeux dramaturgiques de cette scène.. A la lumière de ces

On peut aussi créer un contrôle utilisateur qui possède sa propre interface graphique sur laquelle on peut placer et combiner les contrôles de la boîte à outils4. utiliser une

Indique pour chaque tableau s’il représente un mouvement accéléré, uniforme (vitesse constante) ou ralenti. Complète

Pour nom :x Crée une procédure nommée « nom » de paramètre x Fin Termine la création d'une procédure..

Ecrire une fonction récursive hauteur qui permet de calculer la hauteur d’un arbre binaire, cette fonction doit avoir comme argument la racine de l’arbre et

Quand vous êtes en bonne santé, les aliments que vous mangez sont décomposés en glucose (sucre sanguin) et sont libérés dans le sang.. Lorsque votre glycémie augmente,