以编程方式禁用和启用ToolStripMenuItem

时间:2019-03-27 11:17:17

标签: c# sql visual-studio

我正在设置一个用户和管理员权限,它可以很好地工作,但是我想从“用户”中禁用一些ToolStripMenuItem,但仅对“管理员”启用它们。

以下是根据用户和管理员的角色登录的代码。

if (dt.Rows[0][0].ToString() == "1")
{
  if (ComboBox_LoginAs.SelectedIndex == 0)
{
  this.Hide();                     
  Main_Form mainSystem = new Main_Form();
  mainSystem.Show();
}
else if (ComboBox_LoginAs.SelectedIndex == 1)
{
  this.Hide();
  Main_Form mainSystem = new Main_Form();
  mainSystem.Show();

  /* disable View All Employees for Users */

  ViewAllEmployeesToolStripMenuItem.Enable = false;
}

我希望用户无法查看除Admin之外的所有员工记录。 我希望这个问题不会被否决。

谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

这是我曾经使用过的界面的一个例子,可以完成类似的工作。

主要

namespace UnNamed Project
{
    class Program
    {
        static void Main(string[] args)
        {
            User user;
            user = new SuperUser("Bob", "12345");

            if (user.Login())
            {
                Console.WriteLine($"Welcome {user.Name}");
            }
            else
            {
                Console.WriteLine("An error has occured.");
            }

            Utility.PauseBeforeContinuing();
        }
    }
}

接口类

namespace UnNamed Project
{
    interface ILoginHandler
    {
        bool HandleLogin();
        void SetPassword(string password);
    }
}

用户类别

namespace UnNamed Project
{
    abstract class User
    {
        private string _name;
        private int _securityLevel;

        public User(string name, int securityLevel)
        {
            _name = name;
            _securityLevel = securityLevel;
        }

        abstract public bool Login();
    }
}

SuperUser类

namespace UnNamed Project
{
    class SuperUser : User
    {
        private ILoginHandler _loginHandler;

        public SuperUser(string name, string password) : base(name, 10)
        {
            _loginHandler = new FaceLogin(password);
        }

        public override bool Login()
        {
            return _loginHandler.HandleLogin();
        }
    }
}

如您所见,如果安装正确,则可以创建一个对象“ User”和另一个对象“ Admin”,然后在user中创建一个抽象方法。您可以选择执行一个虚拟方法来处理登录,只需确保您的管理类具有自己的Login()方法的覆盖即可。这将导致程序使用与对象直接相关的方法。

答案 1 :(得分:0)

好的,所以我尝试将MenuStripItem修改器状态更改为“公共”。然后我在主窗体上创建了一个对象。

public static Main_Form GetMainForm_Obj;
public Main_Form()
    {
        InitializeComponent();
    }

然后在表单加载中添加:

private void Main_Form_Load(object sender, EventArgs e)
    {
        eMPLOYEESToolStripMenuItem.Enabled = true;

        GetMainForm_Obj = this;
    }

最后,以我的登录表单:

 if (ComboBox_LoginAs.SelectedIndex == 0)
  {
     this.Hide();
     Main_Form mainSystem = new Main_Form();
     mainSystem.Show();
  }
  else if (ComboBox_LoginAs.SelectedIndex == 1)
  {
     this.Hide();
     Main_Form mainSystem = new Main_Form();
     mainSystem.Show();

     Main_Form.GetMainForm_Obj.eMPLOYEESToolStripMenuItem.Enabled = false;
   }

谢谢大家!