C# 如何从实例化对象的页面处理对象上的按钮单击事件?
我在Visual Studio 2010和IIS6上使用asp.net 3.5 更新:我在这个问题的末尾添加了一个SSCCE来说明我的问题 我有一个我称之为DialogBox的类,它通过包装一个panel对象并将该panel添加到当前页面,在网站上创建一种AlertBox。面板上有一个OK按钮。所以我要做的是在页面上创建这个类的实例,并让OK按钮的click事件由页面上实例化该类的处理程序处理。在我看来,这应该是可行的 在我的DialogBox类中,我定义了一些字段,如下所示C# 如何从实例化对象的页面处理对象上的按钮单击事件?,c#,asp.net,.net,visual-studio-2010,delegates,C#,Asp.net,.net,Visual Studio 2010,Delegates,我在Visual Studio 2010和IIS6上使用asp.net 3.5 更新:我在这个问题的末尾添加了一个SSCCE来说明我的问题 我有一个我称之为DialogBox的类,它通过包装一个panel对象并将该panel添加到当前页面,在网站上创建一种AlertBox。面板上有一个OK按钮。所以我要做的是在页面上创建这个类的实例,并让OK按钮的click事件由页面上实例化该类的处理程序处理。在我看来,这应该是可行的 在我的DialogBox类中,我定义了一些字段,如下所示 private E
private EventHandler _OKClick;
private Button _buttonOK;
public EventHandler OKClick
{
set { _OKClick = value; }
}
我也有一个公共财产定义如下
private EventHandler _OKClick;
private Button _buttonOK;
public EventHandler OKClick
{
set { _OKClick = value; }
}
panel控件有一个.show方法,该方法获取它的所有组件,并在使其可见之前将其全部构建出来。在这个方法中,我有一行
_buttonOK.Click += _OKClick;
然后在我的页面上,我正在实例化这个类,我有这个
protected void Page_LoadComplete(object sender, EventArgs e)
{
if(!IsPostBack)
{
DialogBox Alert = new DialogBox();
Alert.OKClick = new EventHandler(Alert_OkClick);
Alert.Show();
}
}
我有这样定义的实际处理程序
void Alert_OkClick(object sender, EventArgs e)
{
lblOutput.Text = "It Works!!!";
lblOutput.Visible = true;
}
代码编译得很好。我单击按钮,对话框就会消失,正如我在页面发回时预期的那样,但它不会运行Alert_ok click中的代码
为了理解模型,我一直在阅读大量关于代表和事件的书籍。我已经成功地在此DialogBox类上创建了一个事件,我可以从我的页面触发该事件。但是使用按钮是不同的,因为它已经定义了一个我正在尝试处理的事件。我是不是想错了
谢谢你的阅读
这是一个SSCCE
这是一个包装面板对象以生成警报框的类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public class AlertBox
{
Panel _this = new Panel();
Button _OKButton = new Button();
Page page = (Page)HttpContext.Current.Handler;
EventHandler _OkClick;
public AlertBox()
{
_OKButton.Text = "OK";
_this.BorderStyle = BorderStyle.Solid;
_this.Controls.Add(new LiteralControl("<p>This is an ALERT!</p><p>Press OK</p>"));
_this.Controls.Add(_OKButton);
}
public EventHandler OkClick
{
get {return _OkClick;}
set {_OkClick = value;}
}
public void Show()
{
_OKButton.Click += _OkClick;
page.Form.Controls.Add(_this);
}
}
当按钮返回页面时,处理程序为什么不启动
谢谢您的帮助。问题应该在这里:
Alert.OKClick = new EventHandler(Alert_OkClick);
应该是
Alert.OKClick += new EventHandler(Alert_OkClick); instead.
基本上,注册一个方法以在事件发生时响应。您不能像分配变量一样分配它。我只是尝试了这个。起初,我得到一个错误,Alert.OKClick无法在此上下文中使用,因为它缺少get访问器。有趣的Alert.OKClick是一个绑定到EventHandler字段的属性,我希望可以将页面上定义的事件处理程序传递到该字段。我真的不明白为什么我在这里使用+=运算符时需要get访问器。我添加了它,错误消失了,但我的处理程序仍然没有启动。今天我将花一点时间剥离一堆代码,并从中生成一个SSCE。