begin process at 2008 08 22 04:56:55
1 229 775 membres
46 nouveaux aujourd'hui
14 267 membres club

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
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

  • 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

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS