【问题标题】:Disable and Enable ToolStripMenuItem Programmatically以编程方式禁用和启用 ToolStripMenuItem
【发布时间】:2019-03-27 11:17:16
【问题描述】:

我正在设置一个运行良好的用户和管理员权限,但我想从“用户”禁用一些 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 或任何您想要的新类。从用户继承并为管理员设置“安全等级”变量。这将允许您检查用户是否是管理员然后执行此操作...您需要实现一个接口来完成此操作。

标签: c# sql visual-studio


【解决方案1】:

这是我曾经使用过的一个界面示例,它完成了类似的事情。

主要

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();
    }
}

超级用户类

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();
        }
    }
}

如您所见,如果设置正确,您可以创建一个对象“用户”和另一个对象“管理员”,然后在用户中创建一个抽象方法。您也可以使用虚拟方法来处理登录,只需确保您的管理类对其自己的 Login() 方法具有覆盖。这将导致程序使用与对象直接相关的方法。

【讨论】:

    【解决方案2】:

    好的,所以我尝试将 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;
       }
    

    谢谢大家!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-04
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 2014-03-05
      相关资源
      最近更新 更多