如何在用户控件中创建事件按钮单击以进入winform C#上的用户控件

时间:2014-04-11 05:01:01

标签: winforms events user-controls

我遇到了像usercontrol这样的问题:

  • 我有一个formA包含1个名为UC_wrap的用户控件
  • 和UC_wrap包含名为UC_child
  • 的用户控件
  • 在UC_child中包含:按钮添加,按钮编辑,按钮删除和1个文本框

但我不知道如何为formA上的每个按钮创建活动? 拜托,有人帮助我!!!!

2 个答案:

答案 0 :(得分:0)

试试这个

//UC_child - child user control code

public event EventHandler addClick;
public event EventHandler editClick;
public event EventHandler deleteClick;

//call above event in each button click ie.
private void btnAdd_Click(object sender, EventArgs e)
{
    if (addClick != null)
         addClick(sender, e);
}
//Do same for other edit and delete button




//UC_wrap- UC_wrap usercontrol code
//Hand UC_Child event in UC_wrap
//Create event again in UC_wrap
public event EventHandler addClick;
public event EventHandler editClick;
public event EventHandler deleteClick;

private void UC_Child_Load(object sender, EventArgs e)
{
   UC_Child1.addClick += new EventHandler(add_Click);
   //Do same for other edit and delete button
}

private void add_Click(object sender, EventArgs e)
{
   if (addClick != null)
         addClick(sender, e);
}


//formA-This is your form code
private void formA_Load(object sender, EventArgs e)
{
   UC_wrap1.addClick += new EventHandler(add_Click);
   //Do same for other edit and delete button
}
private void add_Click(object sender, EventArgs e)
{
   //Place your code here.
}

答案 1 :(得分:0)

您可以使用一个事件来安装UC_Wrap,该事件会将从按钮接收的任何事件转发给订阅它的任何人。

partial class UC_Wrap : Control
{
    public event EventHandler AddButtonClick
    {
        add { addButton.Click += value; }
        remove { addButton.Click -= value; }
    }
    // etc
}

然后UC_Control可以转发那些事件

partial class UC_Control : Control
{
    public event EventHandler AddButtonClickedInWrap
    {
        add { ucWrap.AddButtonClick += value; }
        remove { ucWrap.AddButtonClick -= value; }
    }
    // etc
}

然后最后在FormA级别,您可以订阅该事件并处理它。

partial class FormA : Form
{
    protected override void OnLoad() 
    {
        ucControl.AddButtonClickedInWrap += ActuallyDoSomething;
    }

    private void ActuallyDoSomething(object sender, EventArgs e)
    {
        // do something
    }
}

这可能是最好的方法。我能想到的唯一更简单的方法是将每个子控制公开,但这样做的主要缺点是暴露的范围远远超过需要。