仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 490|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET教程之ASP.NET 2.0服务器控件开辟之控件款式

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:43:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
语言是不是不是最重要的?asp.net|服务器|控件|控件开辟<P>  跟着.NET手艺的不休开展和成熟,服务器控件愈来愈遭到宽大开辟职员的喜好。同时,服务器控件的开展也出现出一些趋向,比方,功效愈来愈壮大,良多功效渐渐从服务器端转移到客户端。别的,服务器控件也愈来愈美妙。这大概与Windows操纵体系愈来愈考究功效与表面一致的开展思绪有关。本文及其随后的几篇文章将重点先容怎样为服务器控件完成大度的表面。实践上,服务器控件的表面次要由款式属性决意。本文重点对完成控件款式的基础常识举行归纳综合性解说。

  服务器控件款式简介

  关于一般使用开辟职员而言,只必要晓得服务器控件具有哪些款式属性,并懂得每个款式属性大概为控件表面带来的影响便可。比方,假如必要修正页面背景色彩,则必要修正款式属性BackgroundColor值;假如必要设置表格工具表面,那末大概必要设置BorderColor、BorderWidth等款式属性。但是,关于一位控件开辟职员而言,他们不但必要把握使用开辟职员所把握的相干常识,并且还必需懂得构建控件款式属性的创立办法。

  一般,具有款式属性的服务器控件均承继自System.Web.UI.WebControl基类。如许,控件类可主动承继基类中的多个款式属性。这些款式属性包含猎取大概设置控件背景色彩的BackColor、猎取大概设置控件远景色彩的ForeColor、猎取大概设置控件边框色彩的BorderColor、猎取大概设置控件边框款式的BorderStyle等等。假如控件类从WebControl基类承继,那末这些款式属性可主动失掉承继,而且同意开辟职员依据详细情形,对这些款式属性举行重写。别的,假如控件类承继自其他现有控件类,比方GridView,那末自界说控件将主动承继GridView基类的款式属性,如设置瓜代数据行款式的AlternatingRowStyle、设置正在编纂的数据行的款式EditRowStyle等等。很明显,这些承继自已有服务器控件的款式属性并不是此处要会商的重点。但是,读者应懂得款式属性同意从基类承继并没有需修正便可间接利用的。上面持续会商WebControl类中的款式属性。

  WebControl类的款式均封装在ControlStyle属性中。该属性值是Style数据范例。为了更好的懂得ControlStyle,上面枚举了ControlStyle属性的界说代码。

privateStyle_controlStyle;
//界说ControlStyle属性
publicStyleControlStyle{
 get{
  if(_controlStyle==null){
   _controlStyle=CreateControlStyle();
   if(IsTrackingViewState){
    ((IStateManager)_controlStyle).TrackViewState();
   }
  }
 }
}
//界说CreateControlStyle办法
protectedvirtualStyleCreateControlStyle(){returnnewStyle(ViewState);}
  如上代码所示,ControlStyle是一个只读属性,其数据范例为Style。当第一次会见该属性的时分被创立,其历程为:起首,判别_controlStyle是不是为空,假如为空,则挪用CreateControlStyle办法来创立_controlStyle工具,即一个Style的实例。然后,实行视图形态跟踪义务,其详细历程由Style类所供应的TrackViewState办法来完成。

  在开端懂得ControlStyle属性以后,接着我们应懂得与该属性亲切相干的Style类。

  Style类用于暗示服务器控件的款式,其包含以下几个属性:

  (1)BackColor,猎取大概设置Web服务器控件的背景致;

  (2)BorderColor,猎取大概设置控件的边框色彩;

  (3)BorderStyle,猎取大概设置控件的边框款式;

  (4)BorderWidth,猎取大概设置控件的边框宽度;

  (5)CSSClass,猎取大概设置控件在客户端出现的级联款式表类;

  (6)Font,猎取与控件联系关系的字体属性;

  (7)ForeColor,猎取大概设置控件的远景色彩;

  (8)Height,猎取大概设置控件的高度;

  (9)IsEmpty,猎取一个值,该值唆使是不是已在ViewState中界说任何款式元素;

  (10)IsTrackingViewState,前往一个值,该值唆使是不是正在跟踪其视图形态的变动。

  (11)RegisteredCssClass,猎取已向控件注册的级联款式表类;

  (11)ViewState,猎取保留款式元素的视图形态。

  别的,Style类中还包含一些成员办法。使用它们能够很便利的对款式举行操纵。上面枚举了来自WebControl和Style类的,用于完成款式操纵的办法。

  (1)protectedvirturalStyleCreateControlStyle()

  创立由WebControl类在外部用来完成一切与款式有关的属性的款式工具。

  (2)publicvoidApplyStyle(Styles)

  将指定款式的一切非空缺元素复制到服务器控件,改写控件的一切现有的款式元素。个中s暗示要复制的款式。

  (3)publicvoidMergeStyle(Styles)

  将指定款式的一切非空缺元素复制到服务器控件,但不改写该控件现有的任何款式元素。个中s暗示要复制的款式。

  以上三个办法均来自WebControl类。上面两个办法来自Style类。

  (4)publicvirtualvoidCopyFrom(Styles)

  将指定的Style的款式属性复制到从中挪用此办法的Style类的实例中。s暗示要复制的款式的Style。利用此办法Style类确当前实例中的一切属性都将交换为s参数指定的Style中的联系关系属性。

  (5)publicvirtualvoidMergeWith(Styles)

  将指定Style的款式属性与从中挪用此办法的Style类的实例组合。个中s暗示要兼并的款式的Style。此办法经由过程将每一个在Style类确当前实例中未设置的属性设置为s参数指定的Style的对应属性中的值,将两个Style工具的属性连接起来。只要还没有设置的属性将被交换。假如没有设置s参数中的属性,则它将不交换Style类确当前实例中的对应属性。

  为了匡助读者加深关于以上办法的了解,上面枚举了一段示例代码。

//界说两个Style工具实例
Styles1=newStyle();
Styles2=newStyle();
//分离为s1和s2界说ForeColor属性值
s1.ForeColor=Color.Red;
s2.ForeColor=Color.White;
//挪用相干办法
s1.CopyFrom(s2);
s1.MergeFrom(s2);
  下面的代码对照复杂。Style工具实例s1在挪用CopyFrom办法以后,其ForeColor的属性值将被修正为Color.White;s1在挪用MergeFrom以后,其ForeColor的属性值则稳定,仍旧为Color.Red。
<P>  重写款式属性

  款式属性的重载与其他属性的重载没有甚么区分。但是,在完成过程当中必需注重的是,对属性值所作的修正必需上传给控件的ControlStyle属性。上面枚举了一个示例使用程序,其重写了Table控件的款式属性CellSpacing和Caption。服务器控件源代码以下所示。

usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Text;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
namespaceWebControlLibrary{
 [DefaultProperty("Text")]
 [ToolboxData("<{0}:WebCustomControlrunat=server></{0}:WebCustomControl>")]
 publicclassWebCustomControl:Table{
  //创立机关函数
  publicWebCustomControl(){
   base.Caption="事情布置列表";
   base.CellSpacing=0;
  }
  //重写CellSpacing属性
  [Bindable(false),Browsable(false),DefaultValue(0)]
  publicoverrideintCellSpacing{
   get{
    returnbase.CellSpacing;
   }
   set{
    thrownewNotSupportedException("不克不及设置CellSpacing属性.");
   }
  }
  //重写Caption属性
  [DefaultValue("事情布置列表")]
  publicoverridestringCaption{
   get{returnbase.Caption;}
   set{base.Caption=value;}
  }
 }
}
  以上代码次要用于申明重写款式属性的完成办法。详细剖析以下所示。

  (1)控件类WebCustomControl承继自Table。如许,自界说控件则主动承继了Table控件所具有的一切款式属性。这为重写款式属性奠基了基本。

  (2)在控件类的机关函数中设置了Caption和CellSpacing的属性值。

  (3)重写CellSpacing属性。经由过程元数据属性标志设置了该属性不成被数据绑定(Bindable),告知计划器该属性不成被扫瞄(Browsable),最初设置了默许值为0(DefaultValue)。别的,在CellSpacing属性的设置操纵中界说了一个非常。当开辟职员设置该属性时将显现该非常。

  (4)重写Caption属性,为该属性设置默许值。

  大概有些读者以为机关函数的设置内容没有甚么意义。实践上,完成本例的中心就在于此。只要在机关函数中设置新的属性值,才干够将新值传送给ControStyle属性。由于ControlStyle属性次要完成的事情是卖力款式形态办理和款式属性的天生。假如没有把改动传到ControlStyle,那末重写的款式属性就不会依照预期的那样显现。

  上面枚举了为测试自界说控件WebCustomControl而创立的Default.aspx页面源代码。

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<%@RegisterTagPrefix="wcc"Namespace="WebControlLibrary"Assembly="WebControlLibrary"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>重写款式属性</title>
</head>
<body>
 <formid="form1"runat="server">
  <div>
  <wcc:WebCustomControlID="demo1"runat="server"Font-Size="small"BorderWidth="1px"CellPadding="4"BorderColor="black"GridLines="both">
  <asp:TableRow>
   <asp:TableCellfont-bold="True"runat="server">事情项目</asp:TableCell>
   <asp:TableCellfont-bold="True"runat="server">停止日期</asp:TableCell>
   <asp:TableCellfont-bold="True"runat="server">备注</asp:TableCell>
  </asp:TableRow>
  <asp:TableRowrunat="server">
   <asp:TableCellrunat="server">事情1</asp:TableCell>
   <asp:TableCellrunat="server">7月17日</asp:TableCell>
   <asp:TableCellrunat="server">备注内容</asp:TableCell>
  </asp:TableRow>
  <asp:TableRowrunat="server">
   <asp:TableCellrunat="server">事情2</asp:TableCell>
   <asp:TableCellrunat="server">7月27日</asp:TableCell>
   <asp:TableCellrunat="server">备注内容</asp:TableCell>
  </asp:TableRow>
  <asp:TableRowrunat="server">
   <asp:TableCellrunat="server">事情3</asp:TableCell>
   <asp:TableCellrunat="server">7月29日</asp:TableCell>
   <asp:TableCellrunat="server">备注内容</asp:TableCell>
  </asp:TableRow>
 </wcc:WebCustomControl>
</div>
</form>
</body>
</html>
  上面显现了示例使用最终效果。





  依据Default.aspx源代码和使用最终效果可知,上图中的表格题目(Caption),和相邻表格间距(CellSpacing)均由自界说控件内置设置,而不是经由过程控件的显式标志来完成。这就是重写控件款式属性的了局。

  小结

  本文起首对服务器控件款式的基础常识举行了扼要先容,然后,经由过程一个典范示例申明了重写控件款式属性的办法。但愿读者经由过程这些内容,可以对服务器控件款式属性创建一个更加深切的了解。在随后的文章中,我们将解说完成款式属性的详细办法。它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-19 21:42:44 | 只看该作者
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
爱飞 该用户已被删除
板凳
发表于 2015-1-25 14:25:05 | 只看该作者
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
不帅 该用户已被删除
地板
发表于 2015-2-2 22:21:32 | 只看该作者
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-8 14:14:43 | 只看该作者
平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
再现理想 该用户已被删除
6#
发表于 2015-2-25 16:50:34 | 只看该作者
ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
7#
发表于 2015-3-7 23:49:22 | 只看该作者
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
只想知道 该用户已被删除
8#
发表于 2015-3-15 17:07:32 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
精灵巫婆 该用户已被删除
9#
发表于 2015-3-22 02:10:29 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 10:22

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表