快速业务通道

asp.net控件设计时支持(1)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19

一.ControlDesigner类

ControlDesigner作为web服务器控件的设计器的基类,你可以扩展此类. 总之你了解这个类以后你会发现原来你平时看到的控件能够在VS2005设计时中完美的呈现也是微软帮你做的.既然如此,作为一个完美的控件也应该配有设计时的支持,有时候可以让开发达到事半功倍的效果.这里先不介绍这个类其中具体的方法和属性了.我们接了会具体使用的.

二.获取设计时关联控件HTML

(1) 定义控件

让我们来定义两个最简单的控件

 public class DesginControl : Control
  {
    public string Text
    {
      get
      {
        String s = (String)ViewState["Text"];
        return ((s == null) ? String.Empty : s);
      }
      set
      {
        ViewState["Text"] = value;
      }
    }
    protected override void Render(HtmlTextWriter writer)
    {
      writer.Write(Text);
    }
  }
  public class DesginWebControl :WebControl
  {
    public string Text
    {
      get
      {
        String s = (String)ViewState["Text"];
        return ((s == null) ? String.Empty : s);
      }
      set
      {
        ViewState["Text"] = value;
      }
    }
    protected override void RenderContents(HtmlTextWriter writer)
    {
      writer.Write(Text);
    }
  }

(2)第一次测试

好了,两个控件一个派生自Control,一个派生于WebControl,编译后把他们一起拖到设计器上吧,看看效果

asp.net控件设计时支持(1)

图一

DesignControl在Text属性为空的时候,即没有呈现任何内容的时候,设计器上会出现上面这样的文字

DesignWebControl更离谱,看到DesignWebControl文字右边的小方框了没,这个就是其默认呈现的效果.

(2)第二次测试

下面再次给他们两加上Text属性后的效果,再看效果

asp.net控件设计时支持(1)

图二

DesignControl显示效果很好,

DesignWebControl也可以达到跟DesignControl一样的效果,但多了项功能.

其可以允许在设计器中自动的拖拉控件改变控件的宽度和高度,看到右下脚的鼠标和控件中间控件的115和42没.很不幸DesignControl没有这样的功能.为什么呢?

(4)第三次测试

我们再来最后的一次测试.我们再次将Text属性的内容去掉

效果如下

asp.net控件设计时支持(1)

图三

DesignControl恢复回来了,不好的是DesignWebControl成了一白板:)

(6)解决方案来了

其实上面的这两个控件跟Literal和Label控件像极了,其本身使用一点问题也没有,为了设计时更好看,也为了保护我们的眼睛看的舒服点:),我们能做点什么.

一切的一切都是因为.net提供了设计时支持,不然的话,恐怕你连上面的几个界面也看不到了.还好我们可以自己来改变它.那便是利用.net的设计时支持.

(7)每个控件都应该有各自的设计时支持

不知道这句话,大家是否认同,即使控件现在可能不需要,但请做好以后的准备,先空定义一个也可以

下面我们讨论下label控件.

7.1当Text属性为空时,设计器呈现为"["加控件ID的值"]",如[Label1],注意这个是设计器呈现,而非生成的效果呈现.

7.2Control类没有width和height属性,当然设计时也就不支持更改了.

(8)实现

上面说了一大堆废话,还是来看看如何实现吧

public class DesginWebControlDesigner : ControlDesigner
  {
    private DesginWebControl webControl;
    public DesginWebControlDesigner()
    { }
    //初始化控件设计器
    public override void Initialize(IComponen

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号