Отключить и включить ToolStripMenuItem программно - PullRequest
0 голосов
/ 27 марта 2019

Я настраиваю Полномочия пользователя и Администратора, которые работают отлично, но я хочу отключить некоторые 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;
}

Я ожидаю, что пользователи не смогут просматривать все записи сотрудников, кроме администратора.Надеюсь, за этот вопрос не проголосуют.

Спасибо за помощь !!

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Хорошо, поэтому я попытался изменить состояние моего Модификатора MenuStripItem на "public".Затем я создал объект в моей главной форме.

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

Спасибо всем!

0 голосов
/ 27 марта 2019

Вот пример интерфейса, который я когда-то использовал, который выполняет нечто подобное.

Main

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

AsВы можете видеть, что при правильной настройке вы можете создать объект «Пользователь» и другой объект «Администратор», а затем создать абстрактный метод внутри пользователя.В качестве альтернативы вы можете использовать виртуальный метод для обработки входа в систему, просто убедитесь, что ваш класс администратора имеет переопределение для своего собственного метода Login ().Это заставит программу использовать метод, непосредственно связанный с объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...