如何在另一个ascx按钮单击上调用一个ascx的按钮单击委托?

时间:2012-01-30 12:59:14

标签: c# asp.net delegates

我有一个ascx页面假设page1.ascx,因为我有一个按钮点击事件处理程序

btnSave.Click +=
      delegate
            {
                if (Save != null) Save(this, EventArgs.Empty);                   

            };

我还有另一个ascx页面,假设是page2.ascx,我点击了一下按钮

protected void btnEdit_Click(object sender, EventArgs e)
{
  // want to call 
   btnSave.Click +=delegate
                 {
                if (Save != null) Save(this, EventArgs.Empty);                   

            };
}

我想在btnEdit(page2.ascx)上调用btnSave click delegate(page1.ascx)。有可能,如果是,那么如何?

2 个答案:

答案 0 :(得分:1)

如果我理解你的意思,一种方法如下:

public class Control1 : UserControl {
   public delegate void ButtonClickHandler(object sender, EventArgs e);

   public ButtonClickHandler ButtonClickEvent {get;set;}

   public void Save(object sender, EventArgs e) {
      //do something
      if (ButtonClickEvent != null) {ButtonClickEvent(sender, e);}
      //do something
   }
}

public class Control2 : UserControl {
   protected override void OnLoad(EventArgs e) {
      control1.ButtonClickEvent += YourMethod;
   }

   protected void YourMethod(object sender, EventArgs e) { // do something here ... }
}

另一种方法是将第一个控件中的按钮事件声明为属性,并在第二个控件中指定方法。

答案 1 :(得分:0)

我建议将代码从代码隐藏中移出并放入一个单独的类中,以便两个.ascx文件都可以访问它。