大纲

好的,我已经用谷歌搜索过这个并且已经期待一个大胖子了 不!! 但我想我应该问,因为我知道有时人们的头脑中可能潜藏着奇怪的小知识宝石^_^

我正在学习一本书中的一些练习,这个特殊的练习是用户控件。我拼凑了一个控件,并想为其设置 DefaultEvent(已为以前的控件执行此操作),因此当我双击它时,创建的默认事件就是我指定的任何事件。

笔记: 这是标准用户控件 (.ascx), 不是 自定义呈现的控件。

当前代码

这是类和事件定义:

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

当前结果

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

    protected void AddressBox1_Load(object sender, EventArgs e)
    {

    }

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

是否可以为 UserControl 定义 DefaultEvent?这是黑客攻击吗?如果[不]支持,有什么理由吗?


边注: :我们如何在代码中添加下划线?我似乎无法放入并转义字符?

有帮助吗?

解决方案

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

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

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

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

其他提示

好的,我检查了这一点,继承自 WebControl 而不是 UserControl..一切都很好。

好像 达伦·科普 为这一位夺得桂冠!感谢您的投入!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top