Вы можете использовать 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;
}