Activer desactiver le menu Fichier nouveau

Résolu
cs_naylouvar Messages postés 37 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 4 mai 2010 - 1 mai 2008 à 08:12
Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008 - 8 mai 2008 à 09:35
Bonjour:
j'ai une application MDI que ça fait 2 semaines que je cherche comment desactiver le sous-menu Nouveau de main menu Fichier sans trouver la bonne solution :-(
j'ai opter cette solution qui ne fais rien si on clique sur le menu nouveausi la fenetre est déjà ouverte

private
void ShowNewForm(
object sender,
EventArgs e){

Articles childForm =
new
Articles();

foreach (
Form frm
in MdiChildren)

if ( frm
is
Articles ) {childForm = (

Articles) frm;

break; }

else
if( childForm ==
null )
{childForm =

new
Articles(); childForm.MdiParent =

this;
}childForm.MdiParent =

this; childForm.Show();

childForm.Focus();

}

La solution sera  ça : si j'arrive à  acceder au  newToolStripMenuItem apartir de la fenetre  Articles qui est la fentetre enfante de MDIParent1

private
void Articles_Load(
object sender,
EventArgs e){

newToolStripMenuItem.Enabled = false; }

si qlqn de vous à une idée je serai tres reconnaissant
merci.

9 réponses

Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008
7 mai 2008 à 09:58
Bon, j'ai regardé rapidement, je n'ai pas pu tester, travaillant sous Visual Studio 2005.
Mais pour moi , il te manque une variable dans ta classe Form1, qui servirait de réference vers ta fenetre principale :

Dans la Form1 :

public partial class Form1 : Form

{

      

        MDIParent1 MdiParent= null;

      

        public Form1( MDIParent1 appelant )

        {

            InitializeComponent();
            MdiParent = appelant;

        }


        private void Form1_Load(object sender, EventArgs e)

        {

            MdiParent.activer();

        }

}

Et dans la classe MDIParent1 :

 public partial class MDIParent1 : Form
 {
      private int childFormNumber = 0;
 
      public MDIParent1()
      {
            InitializeComponent();
       }
        public void activer()
        {
            newToolStripMenuItem.Enabled = true;
        }

        private void ShowNewForm(object sender, EventArgs e)
        {
            Form1 childForm = new Form1( this );
            childForm.Text = "Fenêtre " + childFormNumber++;
            childForm.Show();
        }
          ...

Le logiciel te demandait que ta fonction activer() soit static car ton appel MDIParent1.activer() est un appel à une methode agissant sur la classe et pas un appel depuis ton instance actuelle de ta classe, il faut que tu fasse tes appels a partir de ton instance : MdiParent.activer()

De plus dans ta fonction activer, pas besoin de mettre MDIParent1.newToolStripMenuItem.Enabled, en effet c'est seulement l'item du menu de ton instance en cours que tu veux desactiver, donc newToolStripMenuItem.Enabled suffit ( ca equivaut implicitement à this.newToolStripMenuItem.Enabled )

Voila voila, si tu peux essayer et me dire si ca fonctionne correctement ( et surtout comme tu le voulais ^^ )

(Sinon je pense pas avoir été très clair sur l'explication du static, donc si quelqu'un voit une meilleure manière de le dire, je suis preneur )
3
Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008
5 mai 2008 à 09:55
Bon , voila ce que je voulais dire dans ton sujet précédent :

Dans le code de ton MDI Parent tu ecris ces fonctions :

public void enableNewMenu ( )
{
    newToolStripMenuItem.Enable = true;
}

public void disableNewMenu ( )
{
    newToolStripMenuItem.Enable = false;
}

Et dans le code de ta fenetre enfant :

private
void Articles_Load(
object sender,
EventArgs e)
{
    MdiParent.disableNewMenu();
}

private void Articles_Close(object sender, EventArgs e)
{
    MdiParent.enableNewMenu();
}

Normalement ca devrait fonctionner 
0
cs_naylouvar Messages postés 37 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 4 mai 2010
5 mai 2008 à 20:46
oui normalement ça devarit fonctionner mais si je fais ça ce message d'erreur apparait:

Erreur 1 Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'BouTiQue.MDIParent1.desactiver()' 

???
je comprend pas pourquoi cette erreur est générer mais je pense  que j'essaye de modifier un objet private par l'intermedière de desactiver() qui est public void
0
cs_naylouvar Messages postés 37 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 4 mai 2010
6 mai 2008 à 05:11
bon j'ai trouver une solution qui marche pas tres bien donc j'appelerai pas une solution
c'est de changer la declaration des elements du menu en static private puis en mettant:

.new
System.Windows.Forms.
ToolStripMenuItem();
au lieu de
 this.newToolStripMenuItem = new
System.Windows.Forms.
ToolStripMenuItem();

static
private System.Windows.Forms.
ToolStripMenuItem newToolStripMenuItem;
mais le concepeteur graphique m'efface automatiquement tous les éléments du menu qui sont déclarés avec static

je suis un débutant donc si vous avez une idée de koi je parle merci d'avance de votre aide parlant des delegates je comprend pas trop ...

je compte beaucoup sur votre aide
0

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

Posez votre question
Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008
6 mai 2008 à 09:52
Tu peux mettre le code complet de tes 2 classes s'il te plait ? J'arrive pas a voir où ca peut bloquer avec juste ta fonction
0
cs_naylouvar Messages postés 37 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 4 mai 2010
6 mai 2008 à 23:04
Merci Liverion pour l'interet que vous avez donner à mon sujet:
voici le lien pour telecharger la solution complete (Format 2008)
la compilation donne l'erreur  suivante:
Erreur 1 Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'TestMenu.MDIParent1.newToolStripMenuItem'
le lien est le suivant:

http://www.ourbati.com/menu.zip

Merci une autre fois
0
cs_naylouvar Messages postés 37 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 4 mai 2010
8 mai 2008 à 02:12
oui oui oui ça marche merci Liverion mille merci
0
cs_naylouvar Messages postés 37 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 4 mai 2010
8 mai 2008 à 02:20
Bon voilà apres 20jours de recherche sur internet j'ai réussis finalement et c'est grace à toi Liverion :-) bon je vais le mettre sur le site comme code de référence pour tout le monde @+
Merci encore
0
Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008
8 mai 2008 à 09:35
De rien, heureux d'avoir pu t'aider ^^

On peut écrire francais sur un clavier allemand , c'est juste plus long !!!
0
Rejoignez-nous