如题……
当写一个用户控件时,我想直接让他继承某一控件的所有属性和方法,应该怎么做呢?

解决方案 »

  1.   

    比如你要是做字定义的GridView:
    [ToolboxData("<{0}:OurGridView runat=server></{0}:OurGridView>")]
    public class OurGridView : System.Web.UI.WebControls.GridView, IPostBackEventHandler, IPostBackDataHandler
    {
    }
      

  2.   

    public mycontrol:systemcontrol
    {}
      

  3.   

    当我写下public class mycontrol : systemcontrol, UserControl
    时,会提示类
    “MyGridView”不能具有多个基类:“System.Web.UI.WebControls.GridView”和“UserControl”
      

  4.   

    那么我在用户控件中应该如何暴露用户控件中定义的一个比如GridView控件的所有公有方法和属性呢?
      

  5.   

    用户控件必须直接或者间接继承自UserControl,因此,由于.net并不支持多重继承,让你的用户控件从一个不是UserControl的子类继承是不可能的。即使支持多重继承,由于ascx的机制,codebehind的类是ascx真实类的父类,因此你继承一个ascx的codebehind父类并不等于继承了ascx上的所有设计时的控件(实际上根本没有继承),此时由于最终没有这些设计时在ascx上控件,那个父类还可能运行时出现大量错误。总之,用户控件不可能真正继承别的控件,包括别的用户控件。如果要继承,你就应该实现自定义控件而不是用户控件。你可以在用户控件中组合其它控件。你可以通过属性接口公开其组件,例如:
      public GridView theGridView{
        get{
          this.EnsureChildControls();
          return this.myGridView;  //return (GridView)this.FindControl("myGridView");
        }
      }不过,用户控件是一种面向应用进行抽象、职责区分的手段。将GridView的职责在接口上表现(传递业务对象),将此职责的具体实现方式(到底是用什么类型的控件)对外隐藏,才是强的设计。
      

  6.   

    有两个基本概念要分清楚
    1.你要做的不是用户控件,而是自定义服务器控件
    2。用户控件从UserControl类继承,自定义服务器控件可以从Control 或WebControl类继承