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

Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Dernière intervention
2 février 2014
- - Dernière réponse : Whismeril
Messages postés
12392
Date d'inscription
mardi 11 mars 2003
Dernière intervention
14 décembre 2018
- 2 févr. 2014 à 17:48
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.
Afficher la suite 

Votre réponse

8 réponses

Messages postés
12392
Date d'inscription
mardi 11 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
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);
Commenter la réponse de Whismeril
Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Dernière intervention
2 février 2014
0
Merci
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.
Commenter la réponse de koukougnon1994
Messages postés
12392
Date d'inscription
mardi 11 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
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
Commenter la réponse de Whismeril
Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Dernière intervention
2 février 2014
0
Merci
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.
Whismeril
Messages postés
12392
Date d'inscription
mardi 11 mars 2003
Dernière intervention
14 décembre 2018
-
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.
Whismeril
Messages postés
12392
Date d'inscription
mardi 11 mars 2003
Dernière intervention
14 décembre 2018
-
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.
Commenter la réponse de koukougnon1994
Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Dernière intervention
2 février 2014
0
Merci
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
Whismeril
Messages postés
12392
Date d'inscription
mardi 11 mars 2003
Dernière intervention
14 décembre 2018
-
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é.
Commenter la réponse de koukougnon1994
Messages postés
12392
Date d'inscription
mardi 11 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
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.
Commenter la réponse de Whismeril
Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Dernière intervention
2 février 2014
0
Merci
Tu as a raison mais une idée de plus ne me ferait pas de mal.
Et pour créer une combo multi colonne?
Commenter la réponse de koukougnon1994
Messages postés
6
Date d'inscription
lundi 27 janvier 2014
Dernière intervention
2 février 2014
0
Merci
ok merci
Commenter la réponse de koukougnon1994

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.