C# 如何从实例化对象的页面处理对象上的按钮单击事件?

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

我在Visual Studio 2010和IIS6上使用asp.net 3.5

更新:我在这个问题的末尾添加了一个SSCCE来说明我的问题

我有一个我称之为DialogBox的类,它通过包装一个panel对象并将该panel添加到当前页面,在网站上创建一种AlertBox。面板上有一个OK按钮。所以我要做的是在页面上创建这个类的实例,并让OK按钮的click事件由页面上实例化该类的处理程序处理。在我看来,这应该是可行的

在我的DialogBox类中,我定义了一些字段,如下所示

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。