如何从 Control 继承,而不是 UserControl?

Posted

技术标签:

【中文标题】如何从 Control 继承,而不是 UserControl?【英文标题】:How to inherit from Control, rather than UserControl? 【发布时间】:2012-09-01 15:27:33 【问题描述】:

我有一个继承自 UserControl 的 ASP.net 控件:

文件 1

public partial class Controls_AllocationDuplicate : System.Web.UI.UserControl

文件 2

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="AllocationDuplicate.ascx.cs" Inherits="Controls_AllocationDuplicate" %>

I need the control to inherit from Control, rather than UserControl:

File.aspx.cs (已更改)

public partial class Controls_AllocationDuplicate : System.Web.UI.Control

File.aspx (未更改)

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="AllocationDuplicate.ascx.cs" Inherits="Controls_AllocationDuplicate" %>

当我这样做时,Visual Studio 会给出一个编译错误:

确保此代码文件中定义的类与“继承”属性相匹配,并且它扩展了正确的基类(例如 Page 或 UserControl)。

我怎样才能让我的控件继承自Control而不是UserControl

系列

这个问题是 *** 系列中的一个,“模板化用户控件”

How to add a Templating to a UserControl? How to inherit from Control, rather than UserControl? UserControl has IsPostBack, but Control does not UserControl does not have public property named ContentTemplate How do i specify CodeFileBaseClass from web.config?

【问题讨论】:

为什么你需要继承自 Control 而不是 UserControl?这当然是合法的,但是从您提供的链接中,我不明白您在尝试什么。 @aquinas:因为UserControl 没有名为ContentTemplate 的公共属性 啊,它得到了设计师的支持。明白了。是的,它也从来没有为我工作过,但是我在设计器中的唯一一次是当我去“哦,废话!我不小心按了设计器按钮,现在我必须等待 5 分钟。” 【参考方案1】:

尝试从 WebControl 继承,然后使用 Register 而不是 Control。 类似这样:http://www.codeproject.com/Articles/2748/Building-an-ASP-NET-custom-web-control-a-textbox-a

【讨论】:

【参考方案2】:

您尝试制作自定义控件而不是用户控件,在这种情况下,您不能使用 ascx 文件来保存您的设计,但需要务实地设计它们。

【讨论】:

以上是关于如何从 Control 继承,而不是 UserControl?的主要内容,如果未能解决你的问题,请参考以下文章

如何继承继承的方法而不是覆盖继承的方法?

如何检测单个控制键盘事件而不是键组合?

如何从代码隐藏中访问UserControl中样式的Setter中ControlTemplate中定义的Control实例?

如何继承 UIApplication 而不是 NSObject

C ++如何确保在使用虚拟继承时它调用继承而不是基函数

如何识别控件的可见性是不是被用户更改?