Rendre inactif des items de menu [Résolu]

warzet 44 Messages postés lundi 27 août 2007Date d'inscription 1 novembre 2016 Dernière intervention - 22 avril 2014 à 10:48 - Dernière réponse : yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention
- 24 avril 2014 à 13:38
Bonjour à tous,
voilà j'ai un gros soucis, je souhaiterais, qu'à l'ouverture de mon application après "Login" que certains items du menu de mon MDIForm soit inactif, soit parce que celui qui s'est connecté n'est pas l' Administrateur.
Alors moi j'ai fais comme ceci:
j'ai déclarer une classe
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Gestion_Ecole_Secondaire
{
class Connexion
{
public Boolean Admin;
}
}
Ensuite dans une form connexion
        private void Click_Valider(object sender, EventArgs e)
{
if ((txtLogin.Text == " ") || (txtLogin.Text.Length == 0))// || (this.txtLogin.Text == "--Entrez votre Login--"))
{
MessageBox.Show("Nom d'utilisateur vide\nS.V.P\nEssayer de nouveau!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
this.txtLogin.Focus();
this.txtLogin.Text = " ";
this.txtLogin.SelectAll();
}
else
{
if (this.txtLogin.Text == "---Entrez votre Login---")
{
MessageBox.Show("Entrez le nom d'Utilisateur\nS.V.P.\nEssayer de nouveau", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
this.txtLogin.Focus();
this.txtLogin.Text = " ";
this.txtLogin.SelectAll();
}
else
{

if ((txtMotDePasse.TextLength == 0) || (txtMotDePasse.Text == " "))
{
MessageBox.Show("Mot de passe vide\nS.V.P\nEssayer de nouveau!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
this.txtMotDePasse.Focus();
this.txtMotDePasse.Text = " ";
this.txtMotDePasse.SelectAll();
}
else
{
System.Data.OleDb.OleDbConnection Cnx = new System.Data.OleDb.OleDbConnection();
Cnx.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + Application.StartupPath + @"\GestionEcoleSecondaire.mdb;Jet OLEDB:Database Password=guehi_1964";
try
{
Cnx.Open();
System.Data.OleDb.OleDbDataReader DtR;
System.Data.OleDb.OleDbCommand Comde = new System.Data.OleDb.OleDbCommand("SELECT * FROM [Usagers]where login='" + (objuser.Encrypt(txtLogin.Text.Trim())) + "' AND mot_de_passe = '" + (objuser.Encrypt(txtMotDePasse.Text.Trim())) + "';", Cnx);
DtR = Comde.ExecuteReader();
if (DtR.Read() == true)
{
if ((this.txtLogin.Text == "administrateur") || (this.txtLogin.Text == "warzet"))
{
//Admin = true;
Conect.Admin = true;
}
else if ((this.txtLogin.Text != "administrateur") || (this.txtLogin.Text != "warzet"))
{
Conect.Admin = false;
}
MAJ_Date();
Form Progress = new frmProgressBar();
Progress.Show();
this.Hide();
DtR.Close();
}
else
{

// Incrementer login essais
intLoginEssais += 1;
// Après le 3éme essai quitter l'application
if (intLoginEssais >= 3)
{
MessageBox.Show("Nombre d'essais dépassés,\nArrêt de l'Application!", this.Text,
MessageBoxButtons.OK, MessageBoxIcon.Information);
DtR.Close();
Application.Exit();
}
else
{
MessageBox.Show("Nom d'Utilisateur\nOu\nMot de Passe Eronnés!\nVeuillez reessayer", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.txtLogin.Text = " ";
this.txtMotDePasse.Text = "";
this.txtLogin.Focus();
this.txtLogin.SelectAll();
return;
}
}
DtR.Close();
}
catch (Exception lg)
{
MessageBox.Show(lg.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
}

}
Mais lorsque je fait un essai sur la MDIForm
        private void frmPrincipal_Load(object sender, EventArgs e)
{
if (this.Conex.Admin == false)
{
this.eleveToolStripMenuItem.Enabled = false;
this.absenceEleveToolStripMenuItem.Visible = false;
}
else if (this.Conex.Admin == true)
{
this.eleveToolStripMenuItem.Enabled = true;
this.absenceEleveToolStripMenuItem.Visible = true;
}
}
Mais comme résultat, quelque soit celui qui se connecte, l'item
this.eleveToolStripMenuItem
reste toujours inactif et item
this.absenceEleveToolStripMenuItem
reste quant à lui toujours invisible.
Aidez si vous avez une solution.
Afficher la suite 

4 réponses

Répondre au sujet
Whismeril 11416 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 22 avril 2014 à 20:17
0
Utile
Bonsoir,

d'abord sur le fond:

les cascades de if ça n'est pas très lisible, ni facile à maintenir.
A ta place j'utiliserais un switch.


Ensuite au lieu de mettre 50 tests pour savoir si tu peux lancer ta connexion, je mettrais le button valider desabled et dans l'événement Changed de tes deux textbox un test qui le passerait enabled uniquement quand c'est bon. C'est très clair pour l'utilisateur.

Pour ton problème, passe un paramètre dans le constructeur de ta form, un bool par exemple.
Comme je ne vois pas ou tu passes de la form ou il y a le button valider à ta form principale je ne peux pas t'aiguiller plus.
Commenter la réponse de Whismeril
warzet 44 Messages postés lundi 27 août 2007Date d'inscription 1 novembre 2016 Dernière intervention - 23 avril 2014 à 10:32
0
Utile
Merci pour vos conseils,
Je tiens à vous dire que dans mon cas actuel, ce que je souhaite est le suivant:
j'ai un form frmConnexion avec login et PassWord et TypeUsager.
TypeUsager (Admin et user)
J'ai également MDIForm dans laquelle se trouve les menus dont je souhaite gérer les items selon le TypeUsager (Admin ou user). Aussi je voudrais savoir comment procéder. Merci
Commenter la réponse de warzet
Whismeril 11416 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 23 avril 2014 à 14:47
0
Utile
Comme je te l'ai dit plus haut, une solution est de passer un paramètre dans le constructeur de ta form.

Dans cet exemple, j'ai deux menu que je choisis de rendre visible ou pas selon la avleur du paramètre:
        public Form4(bool IsAdmin)
        {
            InitializeComponent();

            if (IsAdmin)
            {
                menu1ToolStripMenuItem.Visible = true;
                menu2ToolStripMenuItem.Visible = false;
            }
            else
            {
                menu1ToolStripMenuItem.Visible = false;
                menu2ToolStripMenuItem.Visible = true;
            }
        }


Quand j'affiche ma form comme ça:
            Form4 maForm = new Form4(false);
            maForm.Show();

seul le menu 2 est visible.

Quand j'affiche ma form comme ça:
            Form4 maForm = new Form4(true);
            maForm.Show();

seul le menu 1 est visible.

Commenter la réponse de Whismeril
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 24 avril 2014 à 13:38
0
Utile
Salut,

une autre solution est de rendre la classe outil Connexion globale .
C'est le même principe que d'utiliser un fichier de configuration App.config

Il suffit de changer comme ceci

public static class Connexion
{
        public static Boolean Admin = false;
}

// et de l'utiliser comme ceci

Connexion.Admin = true;
// (...)
if ( Connexion.Admin )
{
    // bla bla
}



Une classe statique ne génère pas d'objet mais existe en tant qu'objet unique en mémoire.

bye...
Commenter la réponse de yann_lo_san

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.