ASP.NET UserControl和DefaultEvent

Rob*_*per 5 c# asp.net user-controls attributes

大纲

好吧,我有谷歌这个,并已经期待一个大胖不!但我想我应该问,因为我知道有时可能会出现在人们头脑中潜伏着的奇怪的知识宝石^ _ ^

我正在通过书中的一些练习来学习,这个特别的练习是用户控制.我拼凑了一个控件,并希望为它设置DefaultEvent(为之前的控件完成此操作)所以当我双击它时,创建的默认事件是我指定的任何内容.

注意:这是标准用户控件(.ascx),而不是自定义呈现控件.

现行守则

这是类和事件定义:

[System.ComponentModel.DefaultEvent("OKClicked")]
public partial class AddressBox : System.Web.UI.UserControl
{
    public event EventHandler OKClicked;
Run Code Online (Sandbox Code Playgroud)

目前的结果

现在,当我在ASPX页面上双击控件时,会创建以下内容:

    protected void AddressBox1_Load(object sender, EventArgs e)
    {

    }
Run Code Online (Sandbox Code Playgroud)

不是我所期待的!所以,我的问题:

是否可以为UserControl定义DefaultEvent?这是一个黑客?如果[不]支持,是否有原因?


旁注:我们如何在代码中加下划线?我似乎无法放入和逃避char?

Dar*_*opp 0

这是一个可能的答案,无需测试(就像马丁所做的那样)。

在反射器中,您将看到 DefaultEventAttribute 允许自身被继承。在反射器中,您会看到 UserControl 类将其默认事件设置为 Load 事件。

所以可能的原因是,即使你用 OKClick 的默认事件装饰你的用户控件,VS 可能仍然认为默认事件是 load,因为它是从默认事件是 Load 的 UserControl 继承的。

只是对可能发生的情况的高级猜测。