Une remarque pertinente ? Une critique impertinente ? Un lynchage en règle ? Une invitation sous les tropiques ? Ecrivez-moi ! |
|
Conçu et enseigné tel qu'en lui même, avec pertes, fracas et
humour de qualité supérieure par Christophe Darmangeat dans le M2 PISE du Master MECI (Université Paris 7) |
|
|
Partie 17
Les applications MDI
Pour finir ce cours en beauté, venons-en à la réalisation des
applications poétiquement dites "MDI", à savoir : Multiple Document
Interface. De quoi s'agit-il donc ? Tout simplement du lot commun
des applications Windows bien connues, du genre Word, Excel, et
tutti quanti. Toutes ces applications, malgré leurs différences,
possèdent en commun une interface gérée par Windows, dans laquelle :
La réalisation d'une application MDI en VB.Net ne pose pas de
difficultés exagérées, à condition, comme toujours, de procéder
méthodiquement.
La première chose à faire sera bien sûr de
définir la Form principale. Ceci s'effectue tout simplement en
donnant la valeur True à sa propriété
IsMdiContainer.
Passons à présent aux Form secondaires.
Évidemment, dans la
même application, et contrairement à la Form principale qui est
par définition unique, il peut y avoir différents genres de Form
secondaires, chaque genre étant adapté à un certain type de
documents.
Mais même en faisant au plus simple, et en admettant
que votre application n'en requiert qu'un seul genre, il
subsiste tout de même un problème avec les Form secondaires :
c'est que vous ne savez pas a priori combien il va y en avoir
d'exemplaires à un moment donné de l'exécution. Si, par exemple,
celle-ci est un traitement de texte simple, il y aura à
l'intérieur de la Form principale autant de Form secondaires que
de documents ouverts... c'est-à-dire de zéro à plusieurs
dizaines.
Dès lors, la seule façon de procéder, pour les Form
secondaires, sera de prévoir leur création dynamique, sur le
modèle de ce nous avons déjà vu dans le chapitre 4 à propos de
la création dynamique des contrôles. Il suffira donc
de s'y prendre méthodiquement. Comme d'habitude, quoi.
Voici donc la marche à suivre :
1. Création de(s) Form(s) enfant(s)
On se contentera de créer une Form par type de Form enfant
nécessaire. Cette étape ne nécessite aucune combine particulière : on
crée la Form tout à fait normalement, en posant dessus les
contrôles voulus, et en leur associant les procédures
événementielles adéquates. Bref, jusque là, rien à signaler.
2. Instanciation des Form enfants
La chose à comprendre, c'est qu'au cours de l'application,
les différentes Form enfants seront toutes des instanciations
des Form enfants que vous venez de créer dans le paragraphe
précédent. Dit d'une autre manière, jusque là, vous n'avez créé
qu'un moule : il va maintenant falloir écrire le code nécessaire
pour fabriquer les gâteaux.
Comme je l'ai déjà dit, ce code obéit aux règles déjà
rencontrées lors de la création dynamique de contrôles. De plus,
il faudra absolument signifier que la nouvelle Form ainsi créée
est une Form enfant de la Form parent. Ceci s'effectue via la
propriété MdiParent de la Form enfant
( à noter qu'il s'agit d'une propriété accessible
seulement par le code).
Ainsi, en admettant que nous ayons baptisé Enfant la Form
servant de modèle à nos Form enfants, le code permettant de
créer une nouvelle instance de cette Form sera :
Dim frm As New Enfant()
frm.MdiParent = Me frm.Visible = True Ceci suppose naturellement que ce code soit écrit dans la
Form parent.
3. Maniement des Form enfants
Évidemment, la question ne se pose que lorsqu'on doit
manier les Form enfant à partir de la Form parent. Le maniement
des Form enfants à partir d'elles-mêmes ne pose aucune espèce de
difficulté : programmer une Form à partir d'elle-même, c'est
très précisément ce que nous avons fait depuis le début de ce
cours.
La première chose à dire, et ce ne sera pas une surprise,
c'est que les Form enfant font toutes partie d'une collection :
la collection MdiChildren.
On pourra ainsi balayer l'ensemble des
Form enfant par une boucle parcourant cette collection, ou
rechercher une Form particulière au sein de cette collection
en fonction de l'une ou l'autre de ses propriétés.
On notera pour terminer l'existence de la propriété de la
Form parent ActiveMdiChild, qui renvoie la Form enfant
actuellement active.
|