Désactiver menu dans Form principal [Résolu]

Signaler
Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014
-
Messages postés
16040
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
-
Salut à tous,
Je suis nouveau en développement C# et déjà je rencontre un problème :
Je développe une application Windows Form avec une form principale qui contient différents menus. Je voudrais désactiver un des menus de ma Form principal à partir d'un bouton d'une autre Form.
j'ai besoin de vos aides.
Merci.

8 réponses

Messages postés
16040
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Bonjour, il te faut passer la référence de ton menu dans les autre formulaires.

Tu peux par exemple passer en paramètre dans le constructeur:
public form2(menu MonMenu)
{
......
}



et dans form1
form2 maForm1 = new form2(menuAcacher);
Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014

Merci pour ton aide, ça fonctionne en mettant d'abord la propriété du menu à Public

Je voudrais ton aide, si possible, pour un autre problème qui est le suivant:
J'ai mon menu principal et une form de connexion. L'utilisateur de l'application doit entrer son login et mot de passe, si c'est ok la form de connexion active le menu principal qui était désactivé.
Ce que je veux c'est de récupérer le login de l'utilisateur pour l'utiliser partout dans l'application (une variable accessible par toutes les form de l'application).
Merci.
Messages postés
16040
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Bonjour
ça fonctionne en mettant d'abord la propriété du menu à Public
ça ne devrait pas. Peux tu poster ton code, en utilisant les balises de coloration

Attention pour le csharp, il y a un petit bug, quand on le choisit dans la liste déroulante, il manque le "s", il faut le rajouter à la main.


Ici un exemple de passage de données:
http://codes-sources.commentcamarche.net/source/26735-passage-de-parametres
Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014

Comme je l'ai dit je change d'abord la propriété 'Mofidiers' de mon menu à 'Public'.

Dans ma form de connexion (construteur) :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace EcoleAdministration
{
    public partial class frmFichierConnexion : Form
    {
        public static string NomUtilisateur = null;
        public static string FonctionUtilisateur = null;
        

        public frmFichierConnexion()
        {
            InitializeComponent();
        }

        private void btnAnnulerFichierConnexion_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void ConnexionUtilisateur()
        {
            if (String.IsNullOrEmpty(txtNomUtilisateurFichierConnexion.Text))
            {
                MessageBox.Show("Vous n'avez pas saisi votre nom utilisateur", "Connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtNomUtilisateurFichierConnexion.Select();
                return;
            }
            if (String.IsNullOrEmpty(txtMotDePasseFichierConnexion.Text))
            {
                MessageBox.Show("Vous n'avez pas saisi votre mot de passe", "Connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtMotDePasseFichierConnexion.Select();
                return;
            }

            OleDbConnection CONNEXION_BASE = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0;Data Source=D:\RV\Etudes\CSharp\EcoleAdministration.accdb");

            using (CONNEXION_BASE)
            {
                //  Ouverture de la connection
                CONNEXION_BASE.Open();

                //Creation d'un commande (requette) de lecture
                using (OleDbCommand COMMANDE = new OleDbCommand())
                {
                    //Association de la commande avec la connection
                    COMMANDE.Connection = CONNEXION_BASE;

                    //Définition de la requette SQL
                    COMMANDE.CommandText = "SELECT * FROM Utilisateurs WHERE NomUtilisateur = @NOMUTILISATEUR And MotDePasseUtilisateur= @MOTDEPASSEUTILISATEUR";

                    //Utilisation de parametre TRES IMPORTANT pour éviter les injections SQL
                    //On a tous quelque chose avec les kevin sur le net, mais ici ce n'est juste qu'arbitraire et a titre d'exemple
                    //COMMANDE.Parameters.Add("NOM", txtNomUtilisateurEmployeParametreConnexion.Text);
                    COMMANDE.Parameters.AddWithValue("NOM", txtNomUtilisateurFichierConnexion.Text);
                    COMMANDE.Parameters.AddWithValue("MOTDEPASSEUTILISATEUR", txtMotDePasseFichierConnexion.Text);
                    // Execution de la requette et lecture du résultat en mode connecté
                    OleDbDataReader reader = COMMANDE.ExecuteReader();

                    //Si le résultat comporte pas des lignes
                    if (!reader.HasRows)
                    {
                        MessageBox.Show("Erreur dans vos paramètres de connexions", "Connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        //txtNomUtilisateurFichierConnexion.Select();
                        return;
                    }

                    while (reader.Read())
                    {
                        //Comparer la casse des lettres saisies
                        if (reader["NomUtilisateur"].ToString() != txtNomUtilisateurFichierConnexion.Text)
                        {
                            MessageBox.Show("Erreur dans vos paramètres de connexions", "Connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            //txtNomUtilisateurFichierConnexion.Select();
                            return;
                        }
                        //Comparer la casse des lettres saisies
                        if (reader["MotDePasseUtilisateur"].ToString() != txtMotDePasseFichierConnexion.Text)
                        {
                            MessageBox.Show("Erreur dans vos paramètres de connexions", "Connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            //txtNomUtilisateurFichierConnexion.Select();
                            return;
                        }
                    }

                    //fermeture de la lecture
                    reader.Close();
                }

                //  Fermeture de la connexion
                CONNEXION_BASE.Close();
                NomUtilisateur = txtNomUtilisateurFichierConnexion.Text;
//passage de paramètre
                MenuPrincipal newform = (MenuPrincipal)Owner;
                newform.MenuFichierConnexion.Enabled = false;
                newform.MenuFichierDeconnexion.Enabled = true;
                newform.MenuEmployeParametresDeConnexion.Enabled = true;
                newform.Text += " \\Utilisateur connecté : " + NomUtilisateur;
                this.Close();
            }       
        }

        private void btnValiderFichierConnexion_Click(object sender, EventArgs e)
        {
            ConnexionUtilisateur();
        }


    }
   

}


et dans la form principale ou se trouve les menus à désacticer :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace EcoleAdministration
{
    public partial class MenuPrincipal : Form
    {
        public MenuPrincipal()
        {
            InitializeComponent();
        }

        private void MenuFichierConnexion_Click(object sender, EventArgs e)
        {
//Affichagage de la form de connexion            
frmFichierConnexion newform = new frmFichierConnexion();
            newform.Owner = this;
            newform.ShowDialog();
        }

        private void MenuFichierDeconnexion_Click(object sender, EventArgs e)
        {
            this.MenuFichierConnexion.Enabled = true;
            this.MenuFichierDeconnexion.Enabled = false;
        }

        private void MenuFichierQuitter_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

    }


J'espère que tu arriveras à me lire sans difficulté fait moi signe si tu as des suggestion ou autres.
Messages postés
16040
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
oui j'ai une petite difficulté, tu n'as pas rajouté le "s", comme je te l'avais demandé et c'est tout gris.
on va s'en sortir quand même.
Messages postés
16040
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Ha oui c'est normal, tu es passé par le Owner, comme ce n'était pas la proposition que je t'avais fait je ne comprenais pas.
Ça marche aussi.
Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014

Je n'arrivais pas avec ta méthode, je m'y prend mal surement voici mes codes corrige moi :
Dans ma form principal nommé MenuPrincipal :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class MenuPrincipal : Form
    {
        public MenuPrincipal()
        {
            InitializeComponent();
        }

        private void connexionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmConnexion newfrm = new frmConnexion(MenuFichierConnexion);
            newfrm.ShowDialog();
        }
    }
}


et dans ma form frmConnexion qui est appelée par le menu MenuFichier :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class frmConnexion : Form
    {
        public frmConnexion(Menu menufichierconnexion)
        {
            InitializeComponent();
        }

        private void btnValiderFichierConnexion_Click(object sender, EventArgs e)
        {
            MenuPrincipal.MenuFichierConnexion.Enabled = false;
            this.Close();
        }
    }
}


excuse moi pour les couleurs je ne maîtrise pas.

J'en profite pour te demander sais tu comment faire un combo multi colonne en visual C#.

Merci encore pour tes aides
Messages postés
16040
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Concernant, le combobox multicolore, la question a déjà été évoquée dans le forum, fais une recherche.
Si tu ne trouves pas ton bonheur, ouvre un post dédié.
Messages postés
16040
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class frmConnexion : Form
    {

        private Menu monmenufichierconnexion;//crée une variable interne dont la portée inclue le constructeur, et la méthode associé à ton bouton
        public frmConnexion(Menu menufichierconnexion)
        {
            InitializeComponent();
            monmenufichierconnexion = menufichierconnexion;
        }

        private void btnValiderFichierConnexion_Click(object sender, EventArgs e)
        {
            monmenufichierconnexion.Enabled = false;
            this.Close();
        }
    }
}



mais rien ne t'oblige à utiliser cette solution, d'autant que tu en as trouvé une qui fonctionne.
Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014

Tu as a raison mais une idée de plus ne me ferait pas de mal.
Et pour créer une combo multi colonne?
Messages postés
16040
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014

ok merci