Petit bout de code tout simple permettant de mettre en cascade, mosaïque horizontale, et verticale des fenêtres 'filles' appartenant à une forme MDI.
J'ai cherché dans les sources et forums, et je n'ai rien trouvé, ou alors j'ai mal cherché :-? :S
C'est pourtant utile dans certaines applications MDI.
Une zip contenant toute l'application
Source / Exemple :
//Ouverture d'une nouvelle fenetre fille
private void menuNewForm_Click(object sender, System.EventArgs e)
{
//Instanciation d'une fenetre fille
Form2 frm = new Form2();
//La forme appartient à la forme principale
frm.MdiParent = this;
frm.Top = 0;
frm.Left = 0;
//Affiche la fenetre Form2
frm.Show();
}
//Mise en cascade des fenetres filles
private void menuFCascade_Click(object sender, System.EventArgs e)
{
int nbr = 0;
//Pour chaque fenetre fille
foreach (Form frm in MdiChildren)
{
//on remet leur état en normal (si elles sont maximisées ou minimisées)
frm.WindowState = FormWindowState.Normal;
//Si une fenetre fille appartient a la classe Form2
if (frm is Form2)
{
//Redimensionnement et ancrage
frm.Top = 35 * nbr;
frm.Left = 20 * nbr;
frm.Width = 300;
frm.Height = 300;
}
nbr++;
}
}
//Mosaïque horizontale des fenetres filles
private void menuFMHor_Click(object sender, System.EventArgs e)
{
int nbr = 0;
//On compte le nbr de fenetre fille appartenant à la classe Form2
foreach (Form frm in MdiChildren)
if (frm is Form2)
nbr++;
//Si il n'y pas de fenetre fille appartenant à la classe Form2 on quitte
if (nbr <= 0)
return;
//On divise la hauteur de la fenetre principale - 60 pixels (barre de titre + barre menu)
int taille = (this.Height - 60) / nbr;
nbr = 0;
//Pour chaque fenetre fille appartenant à la classe Form2
foreach (Form frm in MdiChildren)
if (frm is Form2)
{
//On positionne la fenetre
frm.Top = taille * nbr;
frm.Left = 0;
//Et redimenssionne
frm.Width = this.Width - 40;
frm.Height = taille;
nbr++;
}
}
//Mosaïque verticale des fenetres filles
private void menuFMVer_Click(object sender, System.EventArgs e)
{
int nbr = 0;
//On compte le nbr de fenetre fille appartenant à la classe Form2
foreach (Form frm in MdiChildren)
if (frm is Form2)
nbr++;
//Si il n'y pas de fenetre fille appartenant à la classe Form2 on quitte
if (nbr <= 0)
return;
//On divise la largeur de la fenetre principale - 20 pixels (bords)
int taille = (this.Width - 20) / nbr;
nbr = 0;
//Pour chaque fenetre fille appartenant à la classe Form2
foreach (Form frm in MdiChildren)
if (frm is Form2)
{
//On positionne la fenetre
frm.Top = 0;
frm.Left = taille * nbr;
//Et redimenssionne
frm.Width = taille;
frm.Height = this.Height - 60;
nbr++;
}
}
Conclusion :
J'ai pas réussi à faire planté mon application, mais peut être que vous... ^^ :p
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.