有没有办法通过用户控件禁用主窗体上的按钮

时间:2018-04-29 09:23:37

标签: c# winforms

我正在尝试使用主窗口面板中的用户控件禁用主窗体上的某些按钮。由于继承,我认为这段代码不起作用。

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 :(得分:0)

您可以使用this.FindForm()获取对包含用户控件的表单的引用,将该引用强制转换回MainForm,并控制MainForm上的按钮(假设它们是{ {1}}或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;