通过用户控件调用 C# 窗体上的按钮

Call a button on a C# form through usercontrol

我创建了一个带有一些按钮的用户控件。当您单击 UserControl 中的按钮时,按钮的背景色会发生变化:

 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 中的颜色发生变化时,我希望表单上的按钮启用 = true;

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

所以,在你的控制下,EventHandler,像这样

public partial class UserControl1 : UserControl
{
    public EventHandler ColorChanged; 

然后,点击按钮时触发事件,如下所示:

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
}

您可以使用 Event Aggregator 并使用户控件中的按钮将发布一个事件并让您 window 处理该事件

您可以使用此方法获取对父表单的引用

Form parentFrm = (this.Parent as Form);

然后您可以访问父窗体上的控件,方法是创建 public 或按名称查找控件

 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 myForm()
    {
        InitializeComponent();
        myControl1.ColorChanged += () => { Button1.Enabled = true;};
    }