【问题标题】:How to call button click delegate of one ascx on another ascx button click?如何在另一个 ascx 按钮单击时调用一个 ascx 的按钮单击委托?
【发布时间】:2012-01-30 12:59:13
【问题描述】:

我有一个 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)。可以的话怎么办?

【问题讨论】:

  • 你不想触发事件而是调用方法。所以在第二个 UserControl 中实现一个公共方法Save 并从page1 调用它。

标签: c# asp.net delegates


【解决方案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 ... }
}

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多