Cascade et mosaïque de fenetres filles dans une application mdi

Description

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

Codes Sources

A voir également

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.