通过usercontrol调用C#窗体上的按钮

通过usercontrol调用C#窗体上的按钮,c#,winforms,user-controls,C#,Winforms,User Controls,我用一些按钮创建了一个用户控件。单击用户控件中的按钮时,按钮的背景色会更改: private void button1(object sender, EventArgs e) { Control ctrl = ((Control)sender); switch (ctrl.BackColor.Name) { case "Crimson": ctrl.BackColor = Color.Blue; break;

我用一些按钮创建了一个用户控件。单击用户控件中的按钮时,按钮的背景色会更改:

 private void button1(object sender, EventArgs e)
    {
        Control ctrl = ((Control)sender);
        switch (ctrl.BackColor.Name)
        {
            case "Crimson": ctrl.BackColor = Color.Blue; break;
            case "Green": ctrl.BackColor = Color.Orange; break;
            case "Orange": ctrl.BackColor = Color.Crimson; break;
            case "Blue": ctrl.BackColor = Color.Green; break;
            default: ctrl.BackColor = Color.Crimson; break;
        }
    }
在我的表单上有另一个按钮,启用=false;
因此,当UserControl中的颜色更改时,我希望表单上的按钮enabled=true

UserControl
中,使事件处理程序
ColorChanged
并在颜色更改时触发该事件。在表单中,当事件触发时添加侦听器和适当的代码

因此,在您的控件中,制作
EventHandler
,如下所示

public partial class UserControl1 : UserControl
{
    public EventHandler ColorChanged; 
然后,单击按钮上的fire事件,如下所示:

private void button1(object sender, EventArgs e)
{
    ColorChanged?.Invoke(sender, e);
    //rest of your code...
}
在表单中,添加侦听器:

userControl.ColorChanged += new EventHandler(UserControl_ColorChanged)
并添加将执行的方法和启用按钮

private void UserControl_ColorChanged(object sender, EventArgs e)
{
    //enable button here
}

UserControl
中,使事件处理程序
ColorChanged
并在颜色更改时触发该事件。在表单中,当事件触发时添加侦听器和适当的代码

因此,在您的控件中,制作
EventHandler
,如下所示

public partial class UserControl1 : UserControl
{
    public EventHandler ColorChanged; 
然后,单击按钮上的fire事件,如下所示:

private void button1(object sender, EventArgs e)
{
    ColorChanged?.Invoke(sender, e);
    //rest of your code...
}
在表单中,添加侦听器:

userControl.ColorChanged += new EventHandler(UserControl_ColorChanged)
并添加将执行的方法和启用按钮

private void UserControl_ColorChanged(object sender, EventArgs e)
{
    //enable button here
}

您可以使用并使用户控件中的按钮发布事件并使您的窗口处理事件

您可以使用并使用户控件中的按钮发布事件并使您的窗口处理事件

您可以使用此

Form parentFrm = (this.Parent as Form);
然后,您可以通过公开控件或通过其名称查找控件来访问父窗体上的控件

 Button aButton = (Button)parentFrm.Controls["btnName"];
 if (aButton != null)
     aButton.Enabled = true;

您可以使用以下命令获取对父窗体的引用

Form parentFrm = (this.Parent as Form);
然后,您可以通过公开控件或通过其名称查找控件来访问父窗体上的控件

 Button aButton = (Button)parentFrm.Controls["btnName"];
 if (aButton != null)
     aButton.Enabled = true;
我就这样修好了,

控制:

public delegate void ColorChangeEventHandler();

public partial class myControl: UserControl
{


    public event ColorChangeEventHandler ColorChanged;

    private void OnColorChange()
    {
        if(ColorChanged != null)
        {
            ColorChanged.Invoke();
        }
    }

    public speelRij()
    {
        InitializeComponent();
    }

  private void Button1_Click(object sender, EventArgs e)
    {
        OnColorChange();
        Control ctrl = ((Control)sender);
        switch (ctrl.BackColor.Name)
        {
            case "Crimson": ctrl.BackColor = Color.Blue; break;
            case "Green": ctrl.BackColor = Color.Orange; break;
            case "Orange": ctrl.BackColor = Color.Crimson; break;
            case "Blue": ctrl.BackColor = Color.Green; break;
            default: ctrl.BackColor = Color.Crimson; break;
        }
表格:

我就这样修好了,

控制:

public delegate void ColorChangeEventHandler();

public partial class myControl: UserControl
{


    public event ColorChangeEventHandler ColorChanged;

    private void OnColorChange()
    {
        if(ColorChanged != null)
        {
            ColorChanged.Invoke();
        }
    }

    public speelRij()
    {
        InitializeComponent();
    }

  private void Button1_Click(object sender, EventArgs e)
    {
        OnColorChange();
        Control ctrl = ((Control)sender);
        switch (ctrl.BackColor.Name)
        {
            case "Crimson": ctrl.BackColor = Color.Blue; break;
            case "Green": ctrl.BackColor = Color.Orange; break;
            case "Orange": ctrl.BackColor = Color.Crimson; break;
            case "Blue": ctrl.BackColor = Color.Green; break;
            default: ctrl.BackColor = Color.Crimson; break;
        }
表格:



然后,您可能需要找到一种方法来告诉表单,用户控件中的按钮已更改其背景色。也许在你的用户控件中创建一个事件并在表单中订阅它?你的意思是你只在一个表单中工作?我不知道如何做我只在一个表单中工作,并且使用两个按钮,其中一个按钮已设置为默认值False那么你可能需要找到一种方法来告诉你的表单你的用户控件中的按钮已更改它的属性背景色。也许在你的用户控件中创建一个事件并在你的表单中订阅它?你的意思是你只在一个表单中工作?我不知道怎么做我只在一个表单中工作,一个按钮的两个按钮被设置为默认值False尽管上面的Ninos答案是首选方法。尽管上面的Ninos答案是首选方法it.OP问题是关于winformsOP问题是关于winformsuserControl.ColorChanged+=新事件处理程序(UserControl\u ColorChanged)这给了我error@jellewoord什么样的错误?userControl应该是用户控件的名称。我不知道你是怎么命名的…@jellewoord我已经编辑了我的答案,忘了一件事。如果您还没有尝试过这个答案,请立即尝试:)userControl.ColorChanged+=neweventhandler(userControl\u ColorChanged)这给了我error@jellewoord什么样的错误?userControl应该是用户控件的名称。我不知道你是怎么命名的…@jellewoord我已经编辑了我的答案,忘了一件事。如果尚未尝试此答案,请立即尝试:)