Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CASCADE ET MOSAÏQUE DE FENETRES FILLES DANS UNE APPLICATION MDI


Information sur la source

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

  • //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++;
  • }
  • }
//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
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Arthenius le 16/09/2004 17:51:33

heu..y avait vachement plus simple :

private void m_cascade_Click(object sender, System.EventArgs e)
{
this.LayoutMdi(System.Windows.Forms.MdiLayout.Cascade);
}

private void m_horizontal_Click(object sender, System.EventArgs e)
{
this.LayoutMdi(System.Windows.Forms.MdiLayout.TileHorizontal);
}

private void m_vertical_Click(object sender, System.EventArgs e)
{
this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);
}

private void m_mosaique_Click(object sender, System.EventArgs e)
{
this.LayoutMdi(System.Windows.Forms.MdiLayout.ArrangeIcons);
}

signaler à un administrateur
Commentaire de Arthenius le 16/09/2004 17:58:01

petite précision : "this" est la fenetre MDI parent....

précision N°2 : si vous voulez la liste des fenetre enfant dans un menu il suffit sur votre item de menu "fenêtres" de passer MdiList à true...

et comme par magie si vous afficher plusieurs fenetre fille leur nom va apparaitre en bas de l'item de menu "fenetre" avec un petit séparateur (pour pas les mélanger avec les items cascade, horizontal...Etc...

signaler à un administrateur
Commentaire de TheManu le 07/12/2007 20:03:21

Rappel (pour le parent) :
- la propriété IsMdiContainer de la fenêtre principale/parent (le this ici) doit avoir la valeur true !
- la propriété IsMdiChild indique si le formulaire est un formulaire enfant MDI.
- la propriété MdiChildren retourne un tableau d'objets Form, dont chaque objet identifie l'un des formulaires enfants MDI de ce formulaire. Il est rempli par l'appel MdiParent sur l'enfant ; ainsi les 2 se 'connaissent'.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

fenetre MDI [ par jesaipa_1 ] Slt a tous je sais pas comment on fait pour passer d'une fenetre fille a une autre autre fenetre fille empecher la fermeture d'une MDI fille [ par roinou ] Salut &#224; tous, Je voudrai empecher la fermeture d'une fen&#232;tre MDI Fille (toute les fen&#232;tres en fait). Id&#233;alement cela reviendrai & probleme de fenetre fille/mere [ par gretata ] bonjour a tous !!bonjour, jai un problème pour appeler ma fenetre fille dans une fenetre parent ou mere, voila le code :using</font Scrollbars, fenetre fille [ par MickParadiseLost ] Bonjour. Je n'arrive toujours pas a mettre des scrollbars lorsque l'image qui s'affiche dans la fenetre est plus grande que cette fenetre. J'ai &#233; Fentre mdi et threading [ par Fildomen ] Salutj'ai essay&#233; de toutes les facons pour cr&#233;er une fenetre mdi dans une fenetre m&#232;re, et que la fenetre fille aie son propre thread, Accès MDI Parent depuis MDI Enfant ? [ par brejaud ] Bonjour,Voila , j'ai un problème sur lequel je me casse les dents , et je ne trouve pas la réponse même dans MSDN ...J'ai une fenetre MDI Parent , For Mdi + form maximized [ par thorgal1612 ] Salut,Y'a un truc que je comprend pas. J'ai une mdi qui appelle une fille comme ceci :frmMenu FormMenu = new<f Fenetre MDI, mais aussi avec contrôles... [ par vbond ] Salut,Je désire réaliser une fenetre qui contient une partie avec des controles standards (labels, boutons, zones de texte...) et en dessous, une zone fenetre mdi [ par athenaeros ] slt, voila je prepare un sujet en c#, et au demarrage, dans ma fenetre principale, j'ai une fenetre ki souvre demandant un nom, puis il faut cliker su pblm de PaintEventArgs [ par mxplr ] Voila en fait je suis en train de coder une fonction ki me permet d'afficher un viseur sur un graphik, cette viser se constitue de 2 traits rouge dess


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.