Rendre inactif des items de menu [Résolu]

Messages postés
44
Date d'inscription
lundi 27 août 2007
Dernière intervention
1 novembre 2016
- 22 avril 2014 à 10:48 - Dernière réponse :
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
- 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 

Votre réponse

4 réponses

Messages postés
12258
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 novembre 2018
- 22 avril 2014 à 20:17
0
Merci
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
Messages postés
44
Date d'inscription
lundi 27 août 2007
Dernière intervention
1 novembre 2016
- 23 avril 2014 à 10:32
0
Merci
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
Messages postés
12258
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 novembre 2018
- 23 avril 2014 à 14:47
0
Merci
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
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
- 24 avril 2014 à 13:38
0
Merci
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.