Détecter un click dans menu MdiListItem

cs_jacma Messages postés 54 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 6 septembre 2005 - 3 déc. 2004 à 14:19
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 14 déc. 2004 à 13:51
Bonjour
Est-il possible de détecter l'item d'un menu MdiListItem (liste des fenêtre Mdi filles ouvertes) sur lequel on a cliqué., et si oui comment? D'une façon plus générale, est-il possible de détecter le passage d'une feuille MdiFille à une autre par l'intermédiaire de ce menu MdiListItem?
Merci

11 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
13 déc. 2004 à 17:32
oui, avec l'event MdiChildActivate

et la propriété ActiveMdiChild qui te permet de savoir quel mdichild est actif

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_jacma Messages postés 54 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 6 septembre 2005
13 déc. 2004 à 19:27
Merci de ta réponse.
Cependant, la propriété ActiveMdiChild, si elle te renvoit bien la feuille MDI active n'a rien avoir avec l'item du menu. Ceci étant, j'ai résolu le problème depuis, et je croyais d'ailleurs l'avoir indiqué... Mais j'avai du le réver (;-
Je souhaitais gérer la propriété Enabled d'un menu (pour ouverture d'une MFI fille), afin qu'elle soit définie à false si une instance de cette feuille existait déjà (impossibilité d'ouvrir deux MDI fille identique). J'ai programmé l'évènemment MdiChildActivate
private void frmAccueil_MdiChildActivate(object sender, System.EventArgs e)
et le coeur de la méthode est:
foreach(string nomfille in NomFilles)
{
Contient = TextSender.IndexOf(nomfille, 0, TextSender.Length);
if (Contient > 0)
{
NomMdiActivate = nomfille;
break;
}
}
avec NomFille en tant que tableau des MDI filles.
Depuis, je me demande d'ailleurs si il ne serait pas envisageable d'utiliser le design pattern Singleton pour une solution élégante. Si tu as quelques idées là dessus...
Merci.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
13 déc. 2004 à 21:34
euh je suis paumé là
l'item en mode MdiList ne liste que les enfants deja ouverts
tu n'en as pas besoin pour gerer l'activation/désactivation de l'item qui sert a les ouvrir

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_jacma Messages postés 54 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 6 septembre 2005
14 déc. 2004 à 09:39
Comme tu dis: "l'item en mode MdiList ne liste que les enfants deja ouverts". Et pour les MDI filles qui ne sont pas ouvertes??? Ma barre de menu possède un menu avec un item par feuille MDI pour les ouvrir et les fermer, plus le menu MdiListe pour éventuellement passer, et le menu MdiList pour passer d'une feuille OUVERTE à une autre.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
14 déc. 2004 à 09:42
je pensais plutot a un code de ce genre là pour activer/desactiver les items qui servent à ouvrir les child :

private Form1 m_form1;
private Form2 m_form2;

private void menuItem_Form1_Click(object sender, System.EventArgs e)
{
m_form1 = new Form1();
m_form1.MdiParent = this;
menuItem_Form1.Enabled = false;
m_form1.Closed += new EventHandler(MdiChild_Closed);
m_form1.Show();
}

private void menuItem_Form2_Click(object sender, System.EventArgs e)
{
m_form2 = new Form2();
m_form2.MdiParent = this;
menuItem_Form2.Enabled = false;
m_form2.Closed += new EventHandler(MdiChild_Closed);
m_form2.Show();
}

private void MdiChild_Closed(object sender, EventArgs e)
{
if ( sender is Form1 )
menuItem_Form1.Enabled = true;
else if ( sender is Form2 )
menuItem_Form2.Enabled = true;
}


mais là je commence à me demander si je suis bien tjs dans le sujet ^^

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_jacma Messages postés 54 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 6 septembre 2005
14 déc. 2004 à 11:19
Où as-tu trouvé l'évènement MdiChild_Closed? Je ne vois pour ma part qu'un évènement MdiChild_Activate. Quant à être dans le sujet, disons que ce sont les à cotés. Ceci étant, j'ai une solution qui fonctionne tout a fait correctement, avec pour chaque MDI fille un code du genre (c'est d'ailleur identique à ce que tu suggères dans ta réponses précédente):
    private void mnuAuteur_Click(object sender, System.EventArgs e)
{
  NewFille = true;
  frmAuteurs childAuteurs = new frmAuteurs();
  childAuteurs.MdiParent = this;
   childAuteurs.Show();
}

et
private void frmAccueil_MdiChildActivate(object sender, System.EventArgs e)
{
  string TextSender = ((frmAccueil)sender).Text;
  string[] NomFilles = new string[3]   "Auteurs", "Editeurs", "Livres"};
  string NomMdiActivate = "";
  int Contient;

  foreach(string nomfille in NomFilles)
  {
    Contient = TextSender.IndexOf(nomfille, 0, TextSender.Length);
    if (Contient > 0)
    {
      NomMdiActivate = nomfille;
      break;
    }
  }

  if(this.ActiveMdiChild == null)
  {
    pbTitre.Visible = true;
    this.mnuAuteurs.Enabled = true;
    this.mnuEditeurs.Enabled = true;
    this.mnuLivres.Enabled = true;
  }
  else
  {
    pbTitre.Visible = false;   //c'est un autre problème (image dans la MDI mère)
    foreach(MenuItem item in mnuAcces.MenuItems) 
   {
      string NomMenuFille = item.Text;
      NomMenuFille = NomMenuFille.Replace("&","");

      if(NomMenuFille == NomMdiActivate)
      {
        item.Enabled = !item.Enabled;
        break;
      }
    }
}

L'évènement MdiChildActivate se produit non seulement sur l'activation mais également pour une fermeture (désactivation) de feuille fille.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
14 déc. 2004 à 11:44
MdiChild_Closed n'est pas un evnet, c'est juste le nom que j'ai donné à la methode qui me sert pour l'event Closed de chaque form, donc a sa fermeture

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_jacma Messages postés 54 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 6 septembre 2005
14 déc. 2004 à 12:00
Comment l'invoques-tu? Depuis l'évènement closed de chaque MDI fille?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
14 déc. 2004 à 12:11
ben c'est l'event closed de chaque fille justement

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_jacma Messages postés 54 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 6 septembre 2005
14 déc. 2004 à 13:06
Dans ce cas, l'accès au menu n'est probalement pas aussi simple, le dit menu étant sur la feuille MDI mère. J'avais eu quelque chose de similaire et je me souviens plus exactement la syntaxe. Quelqu'un sur un autre forum m'avait signalé qu'il n'était peut-être pas des plus indiqué (en POO) d'établir ce type de dépendance. En utilisant l'évènement MdiChildActivate, le code est centré sur la seule feuille MDI mère.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
14 déc. 2004 à 13:51
le code que j'ai mit se trouve justement dans le Form mdi

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Rejoignez-nous