Есть ли способ отключить кнопки на главной форме через пользовательский элемент управления - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь отключить некоторые кнопки в главной форме, используя пользовательский элемент управления, расположенный на панели главного окна. Этот код не работает, я думаю, из-за наследования.

MainWindow mW = new MainWindow();
mW.button1.Enabled = false;
mW.button2.Enabled = false;
mW.button3.Enabled = false;
mW.button4.Enabled = false;
mW.button5.Enabled = false;
mW.button6.Enabled = false;
mW.button7.Enabled = false;

Пожалуйста, посоветуйте другой метод.

1 Ответ

0 голосов
/ 29 апреля 2018

Вы можете использовать this.FindForm(), чтобы получить ссылку на форму, содержащую пользовательский элемент управления, привести эту ссылку обратно к MainForm и управлять кнопками на MainForm (предполагая, что они internal или public ).
Тем не менее, это, вероятно, будет неправильно.

Лучшим подходом было бы создание события в вашем пользовательском элементе управления, указание главной формы для этого события и изменение в обработчике событий того, что вы хотите в главной форме.
Таким образом, ваш пользовательский элемент управления не привязан к определенной форме, и вы можете использовать его и в других формах.

Вы можете унаследовать класс EventArgs для отправки определенных данных с событием - в этом случае логическое значение, указывающее, следует ли включать или отключать кнопки:

public class MyEventArgs : EventArgs
{
    public MyEventArgs(bool enable)
    {
        Enable = enable;
    }

    public bool Enable {get;}
}

А затем, в вашем пользовательском управлении:

public event EventHandler<MyEventArgs> SomethingHappened;

// to raise it:
SomethingHappend?.Invoke(); 

В основной форме вы подписываетесь на событие:

MyUserControl.SomethingHappened += MyUserControl_SomethingHappened;

А в обработчике событий вы включаете / отключаете кнопки:

private void MyUserControl_SomethingHappened(object sender, MyEventArgs e)
{
    button1.Enabled = e.Enable;
    button2.Enabled = e.Enable;
    ...
    button7.Enabled = e.Enable;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...