通过usercontrol调用C#表单上的按钮

时间:2017-04-11 09:25:42

标签: c# winforms user-controls

我用一些按钮创建了一个用户控件。当您单击UserControl中的按钮时,按钮的BackColor会更改:

 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;

4 个答案:

答案 0 :(得分:3)

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
}

答案 1 :(得分:1)

您可以使用此

获取对父表单的引用
Form parentFrm = (this.Parent as Form);

然后,您可以通过公开或通过名称

查找控件来访问父表单上的控件
 Button aButton = (Button)parentFrm.Controls["btnName"];
 if (aButton != null)
     aButton.Enabled = true;

答案 2 :(得分:0)

你可以使用Event Aggregator并使用户控件中的按钮发布一个事件并让你窗口处理事件

答案 3 :(得分:0)

我这样修好了;

控制:

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;};
    }