ограничение доступа к форме с другой формы

Можно ли каким-то образом скрыть кнопки на форме которая открывается с другой формы (очень понятно, ага). Кароче есть форма со списком врачей. В системе два пользователя -Администратор и Врач. Администратору доступны кнопки редактирования, добавления и удаления (скрин 1). введите сюда описание изображения

Врачу же показывается та же самая форма, только со скрытыми и недоступными для нажатия кнопками добавления и удаления. Кнопка редактирования данных переименована в "Просмотреть" введите сюда описание изображения

Вот кусок кода:

 private void DoctorFiles_Click(object sender, EventArgs e)
    {
        DoctorListForm doctorListForm = new DoctorListForm();
        doctorListForm.AddDoctor.Enabled = false;
        doctorListForm.AddDoctor.Visible = false;
        doctorListForm.DeleteDoctor.Enabled = false;
        doctorListForm.DeleteDoctor.Visible = false;
        doctorListForm.EditDoctor.Text = "Просмотреть карточку врача";
        doctorListForm.Show();
    }

Здесь DoctorListForm - та самая форма которая на пикчах. AddDoctor, DeleteDoctor, EditDoctor - кнопки добавления, удаления, редактирования.

Вся соль в том, что я хочу как-то сделать, чтобы по нажатию кнопки "Просмотреть" врачу открывалось окно просмотра, только тоже со скрытыми кнопками сохранения и очистки полей, в общем ограничить доступ к ней (скрин формы внизу). форма редактирования на которой надо скрыть кнопки

Была мысль сделать через потоки, но не втыкаю как нормально проверку на нажатие кнопки с другой формы сделать:

 private void DoctorFiles_Click(object sender, EventArgs e)
    {
        DoctorListForm doctorListForm = new DoctorListForm();
        doctorListForm.AddDoctor.Enabled = false;
        doctorListForm.AddDoctor.Visible = false;
        doctorListForm.DeleteDoctor.Enabled = false;
        doctorListForm.DeleteDoctor.Visible = false;
        doctorListForm.EditDoctor.Text = "Просмотреть карточку врача";
        doctorListForm.Show();

        //EditDoctorForm editDoctorForm = new EditDoctorForm(connection, fileId);
        //editDoctorForm.Enabled = false;

        if (doctorListForm.EditDoctor_Click(this, e) /*????*/)
        {
            new System.Threading.Thread(OpenDoctorFile).Start();
        }
    }
    private void OpenDoctorFile()
    {

        EditDoctorForm editDoctorForm = new EditDoctorForm(connection, fileId);
        editDoctorForm.button1.Enabled = false;
        editDoctorForm.button1.Visible = false;
        editDoctorForm.button2.Enabled = false;
        editDoctorForm.button2.Visible = false;
        editDoctorForm.Enabled = false;
        editDoctorForm.Show();

Заранее спасибо за ответы!!


Ответы (1 шт):

Автор решения: Игорь

Не нужно управлять контроллами одной формы из другой. Каждая форма должна по максимуму не зависеть от других по части данных и тем более визуализации.

  1. Добавляешь перечисление типа:

    enum FormMode{ BrowseMode = 1, EditMode = 2 }

  2. Добавляешь свойство в открываемую форму:

    private FormMode FormMode {get;set;} = FormMode.BrowseMode;
    
  3. Добавляешь его в конструктор

  4. Прописываешь правила видимости/доступности контроллов в инициализации формы. Эти правила должны зависеть от FormMode.

  5. При попытке открыть форму из нужного места или при нужном праве передаешь нужное значение в конструктор:

    EditDoctorForm editDoctorForm = new EditDoctorForm(connection, fileId, formMode); editDoctorForm.Show();

→ Ссылка