Rendre inactif des items de menu

Résolu
warzet Messages postés 44 Date d'inscription lundi 27 août 2007 Statut Membre Dernière intervention 1 novembre 2016 - 22 avril 2014 à 10:48
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre 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.

4 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
22 avril 2014 à 20:17
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.
0
warzet Messages postés 44 Date d'inscription lundi 27 août 2007 Statut Membre Dernière intervention 1 novembre 2016
23 avril 2014 à 10:32
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
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
23 avril 2014 à 14:47
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.

0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
24 avril 2014 à 13:38
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...
0
Rejoignez-nous