我的MasterPage上有一个按钮,我希望ContentPage处理按钮的Click事件。这是我到目前为止所做的:
//Event in MasterPage
public event EventHandler Search_Submit;
//ButtonClick event in MasterPage
protected void SearchButton_Click(object sender, EventArgs e)
{
if (Search_Submit != null)
{
Search_Submit(this, EventArgs.Empty);
}
}
//EventHandler in Page_Init on ContentPage
Master.Search_Submit += new EventHandler(Master_Search_Submit);
//Search_Submit event in ContentPage
private void Master_Search_Submit(object sender, EventArgs e)
{
//Perform appropriate action...
}
这一切都有效 - 但是,我想用EventArgs传递一个值。我相信我需要创建一个自定义EventArgs类,它继承自EventArgs并具有我的自定义属性。但是,当我这样做时,我收到以下错误:'Master_Search_Submit'没有重载匹配委托'System.EventHandler'。
答案 0 :(得分:2)
您已定义事件以使用EventHandler委托。委托是指向函数的指针,它定义响应方法必须具有的签名。 EventHandler委托的签名是:
delegate void EventHandler(object sender, EventArgs e);
在.NET 2.0中,有一个通用的EventHandler委托,允许您指定要使用的EventArgs类型。
public event EventHandler<MyEventArgs> Search_Submit;
现在您可以使用带有签名
的事件处理程序void EventArgs<TArgs>(object sender, TArgs e) where TArgs: EventArgs
在你的情况下,这将是:
void Master_Search_Submit(object sender, MyEventArgs e)
答案 1 :(得分:1)
您必须将您的参数作为EventArgs传递,并将其强制转换为您的处理程序:
private void Master_Search_Submit(object sender, EventArgs e)
{
MyEventArgs mea = (MyEventArgs)e;
//Perform appropriate action...
}
或者您必须定义一个需要自定义事件args类的委托:
public delegate void MyEventHandler(object sender, MyEventArgs mae);
public event MyEvent myEvent
myEvent += new MyEventHandler(Master_Search_Submit);
答案 2 :(得分:0)
您可以使用CommandEventHandler而不是EventHandler委托。