Метка не скрывает даже значение false с помощью C#

#c# #menu #textbox #hide #visible

#c# #меню #текстовое поле #скрыть #видимый

Вопрос:

У меня странная проблема с моим медицинским приложением, кодирующимся на C #. Я получил функцию, которая скрывает некоторые функции меню в соответствии с профилем. Например, фельдшер не должен иметь доступа к созданию пользователя, и так далее. Теперь, когда я пытаюсь скрыть Label или TextBox с Label.Visible = false; помощью функции или даже при загрузке формы, ничего не скрывается.

Ниже приведена моя функция:

 private void LoadMenu(string mySession)
{            
    switch (mySession)
    {
        case "Secretaire":
            BtnCaisse.Visible = false;
            BtnPharmacie.Visible = false;
            BtnParametrage.Visible = false;
            BtnLaboratoire.Visible = false;
            UserChildNouveau.Visible = false;
            break;

        case "Administrateur":
            BtnPharmacie.Visible = false;
            BtnLaboratoire.Visible = false;
            break;
    }
}
  

Комментарии:

1. Вы отлаживали это с помощью step debugger? Возможно, это не соответствует вашему коду… Например, переключатель чувствителен к регистру.

2. Привет, не могли бы вы объяснить мне, как использовать step debugger. Я слишком хорошо знаю, что swich чувствителен к регистру

3. learn.microsoft.com/en-us/visualstudio/debugger/…

4. и learn.microsoft.com/en-us/visualstudio/debugger/…

Ответ №1:

Основываясь на комментарии @the-generals, вы можете избежать ошибки с заглавными буквами, установив все в верхний или нижний регистр:

 private void LoadMenu(string mySession)
{
    switch (mySession.ToUpper())
    {
        case "SECRETAIRE":
            BtnCaisse.Visible = false;
            BtnPharmacie.Visible = false;
            BtnParametrage.Visible = false;
            BtnLaboratoire.Visible = false;
            UserChildNouveau.Visible = false;
            break;

        case "ADMINISTRATEUR":
            BtnPharmacie.Visible = false;
            BtnLaboratoire.Visible = false;
            break;
    }
}
  

Обратите внимание, что я использовал ToUpper() в switch параметре, а операторы case также указаны в верхнем регистре.

Для отладки Visual Studio позволяет щелкнуть по желобу (левое поле в редакторе), чтобы установить точку останова. Вы узнаете это, когда увидите большую красную точку в канаве. Когда вы нажмете F5, VS остановится на этой точке останова. Затем вы можете перейти к авто, локальным или посмотреть windows (или просто навести курсор на переменную), чтобы узнать, какое значение mySession имеет значение. Вы также можете выполнить пошаговое выполнение кода после достижения точки останова:

  • F10 переходит
  • F11 переходит в метод

Это еще не все, и вам стоит потратить время на изучение того, как работает отладчик, потому что это сэкономит вам много времени.

Комментарии:

1. Привет, Джо, спасибо за ваш совет, но я уже пытаюсь установить точку останова в функции LoadMenu(), а значение MySession равно null. Также при создании текстового поля в моей форме и установке его в form_load значение Visible равно false, т.е. TextBox1.Visible = false; поле не скрыто

2. Вы сказали, что «MySession равен нулю», что является причиной, по которой ни один из блоков case не выполнялся. Теперь используйте отладчик, чтобы узнать, почему MySession был равен null, когда он должен был содержать одно из двух значений в инструкции switch .