Troisième partie de notre construction d'un éditeur de texte
: après en avoir construit les fondations (notre
article du 27 octobre), puis y avoir ajouté une meilleure
gestion de la taille de la fenêtre et une vérification de
la sauvegarde (notre
article du 2 novembre), nous allons y ajouter un menu
Modifier, classique de tous les éditeurs, et un menu contextuel
pour ces mêmes fonctionnalités.
Les options de modification
La plate-forme .NET a été bien conçue, et une fois de plus
ce dont nous avons besoin pour notre petit projet est directement
accessible. Ainsi, pour pouvoir créer des actions de coupure,
copie ou insertion du texte, il faut normalement passer par
des méthodes du presse-papiers, ce qui peut se révéler assez
laborieux selon les langages. Grâce à .NET, il suffit de faire
appel aux méthodes dédiées de notre champ textuel (en l'occurrence,
TextBox), Cut(),
Copy(), Paste()
et même SelectAll(). Celles-ci
prennent en charge le presse-papiers, et le développeur n'a
plus qu'à se soucier de la manière la plus adaptée de les
implémenter
Tout comme pour les menus précédemment créés Fichier et Infos,
il faut créer le menu intermédiaire Modifier :
miModifier.MenuItems.Add(new MenuItem("Couper",
new EventHandler(this.Couper_Clicked)));
miModifier.MenuItems.Add(new MenuItem("Copier",
new EventHandler(this.Copier_Clicked)));
miModifier.MenuItems.Add(new MenuItem("Coller",
new EventHandler(this.Coller_Clicked)));
miModifier.MenuItems.Add(new MenuItem("Tout sélectionner",
new EventHandler(this.ToutSelectionner_Clicked)));
Enfin, triviaux, les gestionnaires d'évènements eux-mêmes,
faisant appel aux fonctions de NET :
private void Couper_Clicked (object
sender, System.EventArgs e)
{
Clipboard.SetDataObject(txt.SelectedText);
txt.SelectedText = "";
}
private void Copier_Clicked (object sender, System.EventArgs
e)
{
txt.Copy();
}
private void Coller_Clicked (object sender, System.EventArgs
e)
{
txt.Paste();
}
private void ToutSelectionner_Clicked (object sender, System.EventArgs
e)
{
txt.SelectAll();
}
Le premier
gestionnaire est légèrement différent des autres : puisqu'il
n'y a pas de méthode Cut(),
nous devons ici agir directement avec le presse-papiers (Clipboard)
en lui fournissant le texte sélectionner (txt.SelectedText),
puis effacer de la fenêtre ce même texte sélectionné (le remplacer
par une chaîne vide).
Le menu contextuel
Ajouter un menu contextuel a une application n'est guère plus
compliqué que de lui créer une barre de menu simple : seule
la classe diverge; nous utilisons ContextMenu()
plutôt que MainMenu(). Très
important : nous assignons ensuite MenuContextuel
à la propriété ContextMenu
de notre champ texte txt,
sans quoi ce sera le menu standard qui apparaîtra.
ContextMenu MenuContextuel = new ContextMenu();
txt.ContextMenu = MenuContextuel;
Puis, on crée les options l'une après l'autre :
MenuItem CtxtCouper = new MenuItem();
CtxtCouper.Text = "Couper";
CtxtCouper.Click += new EventHandler(this.Couper_Clicked);
MenuItem CtxtCopier = new MenuItem();
CtxtCopier.Text = "Copier";
CtxtCopier.Click += new EventHandler(this.Copier_Clicked);
MenuItem CtxtColler = new MenuItem();
CtxtColler.Text = "Coller";
CtxtColler.Click += new EventHandler(this.Coller_Clicked);
MenuItem CtxtToutSelectionner = new MenuItem();
CtxtToutSelectionner.Text = "Tout sélectionner";
CtxtToutSelectionner.Click += new EventHandler(this.ToutSelectionner_Clicked);
Celles-ci font appel aux mêmes gestionnaires d'évènements
que les options de notre menu Modifier, mais rien (sinon la
volonté de ne pas dérouter l'utilisateur) n'empêche
de faire appel à d'autres gestionnaires.
Enfin, nous attachons l'ensemble de ces options au menu contextuel,
grâce à la méthode AddRange()
:
MenuContextuel.MenuItems.AddRange(
new MenuItem[]
{
CtxtCouper,
CtxtColler,
CtxtCopier,
CtxtToutSelectionner
}
);
|
Forum |
|
Réagissez
dans les forums
de JDN Développeurs
|
De là, on pourrait facilement créer des sous-menus
pour chaque option du menu contextuel, afin d'en grouper certaines.
Autrement méthode de groupage d'options, créer
un séparateur, qui n'est rien d'autre qu'une options
de menu (MenuItem) dont le
nom (attribut Text) est "-",
et est intérprété par .NET comme une
ligne de séparation...
|