webcontrol使用上.docx

上传人:b****6 文档编号:8216616 上传时间:2023-01-29 格式:DOCX 页数:6 大小:74.41KB
下载 相关 举报
webcontrol使用上.docx_第1页
第1页 / 共6页
webcontrol使用上.docx_第2页
第2页 / 共6页
webcontrol使用上.docx_第3页
第3页 / 共6页
webcontrol使用上.docx_第4页
第4页 / 共6页
webcontrol使用上.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

webcontrol使用上.docx

《webcontrol使用上.docx》由会员分享,可在线阅读,更多相关《webcontrol使用上.docx(6页珍藏版)》请在冰豆网上搜索。

webcontrol使用上.docx

webcontrol使用上

 到现在为止,我已经写了三篇关于自定义控件开发的文章,很感谢大家的支持!

不知道大家对我讲的方式有什么好的建议,我尽量使自定义控件的技术让更多的程序员同胞接受。

好了,开发开始了!

  本章还是延续上章的例子,开发一个CreditCardForm控件。

  其实本章也不难,相信大家看完后,也觉得很简单!

  我们首先开谈谈继承Control和WebControl的区别:

其实二者最大的区别就是在,如果我们开发的控件继承WebControl,那么我们的控件就支持更多的CSS样式。

而继承于Control的自定义控件的样式相对就少些。

  其实还有一个区别就在开发的规范上。

我们来简单的看看上一章的自定义控件的代码,主要来看看Render方法中的代码:

大家只扫一眼就可以了。

 1protectedoverridevoidRender(HtmlTextWriterwriter)

 2    {

 3      //显示table标记

 4      writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"287px");

 5      writer.AddStyleAttribute(HtmlTextWriterStyle.Height,"128px");

 6      writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth,"0");

 7      writer.AddAttribute(HtmlTextWriterAttribute.Id,"mytable");

 8      writer.RenderBeginTag(HtmlTextWriterTag.Table);

 9

10      //显示table类的标记包含tr,td还有一些textbox,下拉框等

11      writer.RenderBeginTag(HtmlTextWriterTag.Tr);

12

13      writer.RenderBeginTag(HtmlTextWriterTag.Td);

14      writer.Write(PaymentMethodText);

15      writer.RenderEndTag();

16

17      writer.RenderBeginTag(HtmlTextWriterTag.Td);

18      writer.AddAttribute(HtmlTextWriterAttribute.Name,"PaymentMethod");

19      writer.AddAttribute(HtmlTextWriterAttribute.Id,"PaymentMethod");

20      writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"100%");

21      writer.RenderBeginTag(HtmlTextWriterTag.Select);

22

23      writer.AddAttribute(HtmlTextWriterAttribute.Value,"0");

24      writer.RenderBeginTag(HtmlTextWriterTag.Option);

25      writer.Write("Master");

26      writer.RenderEndTag();

27

28      writer.AddAttribute(HtmlTextWriterAttribute.Value,"1");

29      writer.RenderBeginTag(HtmlTextWriterTag.Option);

30      writer.Write("Visa");

31      writer.RenderEndTag();

32

33      writer.RenderEndTag();

34      writer.RenderEndTag();

35      writer.RenderEndTag();

36

37      writer.RenderBeginTag(HtmlTextWriterTag.Tr);

38      writer.RenderBeginTag(HtmlTextWriterTag.Td);

39      writer.Write(CreditCardNoText);

40      writer.RenderEndTag();

41

42      writer.RenderBeginTag(HtmlTextWriterTag.Td);

43      writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");

44      writer.AddAttribute(HtmlTextWriterAttribute.Name,"CreditCardNo");

45      writer.AddAttribute(HtmlTextWriterAttribute.Id,"CreditCardNo");

46      writer.RenderBeginTag(HtmlTextWriterTag.Input);

47      writer.RenderEndTag();

48      writer.RenderEndTag();

49      writer.RenderEndTag();

50

51      writer.RenderBeginTag(HtmlTextWriterTag.Tr);

52      writer.RenderBeginTag(HtmlTextWriterTag.Td);

53      writer.Write(CardholderNameText);

54      writer.RenderEndTag();

55

56      writer.RenderBeginTag(HtmlTextWriterTag.Td);

57      writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");

58      writer.AddAttribute(HtmlTextWriterAttribute.Name,"CardholderName");

59      writer.AddAttribute(HtmlTextWriterAttribute.Id,"CardholderName");

60      writer.RenderBeginTag(HtmlTextWriterTag.Input);

61      writer.RenderEndTag();

62      writer.RenderEndTag();

63      writer.RenderEndTag();

64

65      writer.RenderBeginTag(HtmlTextWriterTag.Tr);

66      writer.RenderBeginTag(HtmlTextWriterTag.Td);

67      writer.Write(ExpirationDateText);

68      writer.RenderEndTag();

69

70      writer.RenderBeginTag(HtmlTextWriterTag.Td);

71      writer.AddAttribute(HtmlTextWriterAttribute.Name,"Month");

72      writer.AddAttribute(HtmlTextWriterAttribute.Id,"Month");

73      writer.RenderBeginTag(HtmlTextWriterTag.Select);

74      for(intmonth=1;month<13;month++)

75      {

76        writer.AddAttribute(HtmlTextWriterAttribute.Value,month.ToString());

77        writer.RenderBeginTag(HtmlTextWriterTag.Option);

78        writer.Write(month.ToString());

79        writer.RenderEndTag();

80      }

81

82      writer.RenderEndTag();

83

84      writer.Write(" ");

85

86      writer.AddAttribute(HtmlTextWriterAttribute.Name,"Year");

87      writer.AddAttribute(HtmlTextWriterAttribute.Id,"Year");

88      writer.RenderBeginTag(HtmlTextWriterTag.Select);

89

90      for(intyear=2008;year<2015;year++)

91      {

92        writer.AddAttribute(HtmlTextWriterAttribute.Value,year.ToString());

93        writer.RenderBeginTag(HtmlTextWriterTag.Option);

94        writer.Write(year.ToString());

95        writer.RenderEndTag();

96      }

97

98      writer.RenderEndTag();

99

100      writer.RenderEndTag();

101      writer.RenderEndTag();

102

103

104      writer.RenderBeginTag(HtmlTextWriterTag.Tr);

105      writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2");

106      writer.AddAttribute(HtmlTextWriterAttribute.Align,"center");

107      writer.RenderBeginTag(HtmlTextWriterTag.Td);

108      writer.AddAttribute(HtmlTextWriterAttribute.Type,"submit");

109      writer.AddAttribute(HtmlTextWriterAttribute.Value,SubmitButtonText);

110      writer.RenderBeginTag(HtmlTextWriterTag.Input);

111      writer.RenderEndTag();

112      writer.RenderEndTag();

113      writer.RenderEndTag();

114

115      //table的结束标记

116      writer.RenderEndTag();

117

118      

119

120

121    }

  相信这段代码大家都和熟悉。

在这段代码的作用主要显示了一个table以及table之中的标记元素。

  如果一这个控件已经写好了,加入我们想要改改table的样式,如把border设为1,或者改变显示的颜色等,那么我们就

  要再次打开这段代码,修改代码。

其实这就不好。

为什么?

  其实这个方法中的代码做了四件事:

  1.显示控件最外层的包含标记,即table

  2.显示最外层标记的一些属性,如border.id等

  3.显示控件的主要内容,如,显示输入框,下拉框,按钮。

  4.显示控件最外层包含标记的结束标记。

  这样看来,这个方法的职责就有四个。

大家应该还记得面向对象设计的原创:

单一职责。

虽然这个元素一般用在类上,

  但是我们更加要注意,这个原则用的宗旨:

使对象只有一个变化的因素。

这个原则也用在方法的设计上。

  就是说,我们如果想要改变最外层标记table一些属性,我们就影响了其他三个职责。

同理,我们想改变其他的元素或者

  内容,结果可想而知。

  为此,继承WebControl的控件就更加的规范和灵活:

  其实,继承于WebControl的控件的显示还是在Render方法中显示,只是这个Render方法已经不由我们来写了:

  如下:

1

2    protectedoverridevoidRender(HtmlTextWriterwriter)

3    {

4       RenderBeginTag(writer);

5       RenderContens(writer);

6       RenderEndTag(writer);

7

8    }

  因为我们之前说,Render方法的职责有四个。

所以WebControl的Render方法就把这些职责分离了。

以后我们能就

  可以独立的改变一个因素了。

大家也许奇怪:

不是说有四个职责吗,但是上面只是显示了三个方法,其实在

 RenderBeginTag()方法中包含显示最外层标记样式的方法。

  所以我们只要分别重写这三个方法,一个继承WebControl的自定义的控件就成了。

不要怕,方法很多,但是很简单,而

  且代码我们都懂,之前差不多都讲了的。

  我想把写成后的控件给大家看看,让大家看下我们本章的目标:

  

  大家看见没有:

是不是支持的样式多了!

  好了,我们来写吧:

不难哦:

  首先看看我们要的写方法以及他们的功能:

protectedoverridevoidRender(HtmlTextWriterwriter)

    {

        //显示最外层包含标记开始的标记,即,显示

       RenderBeginTag(writer);

       //显示table标记内的内容,如

       RenderContens(writer);

       //显示最外层包含标记结束标记

       RenderEndTag(writer);

    }

  现在的思路很清晰吧,首先来显示

  很简单,只要如下就可以了。

1 protectedoverrideHtmlTextWriterTagTagKey

2    {

3      get

4      {

5        returnHtmlTextWriterTag.Table;

6      }

7    }

  不要奇怪,因为RenderBeginTag()方法内部实际是调用了这个属性来显示的最外层的包含标记的。

  好了,第一步就写完了啊!

简答吧!

  下面来显示table的样式,因为我们的控件的最外层的标记是table,显示他的样式只要这样就OK了。

1 protectedoverrideStyleCreateControlStyle()

2    {

3      returnnewTableStyle(ViewState);

4    }

  又写完了一部分。

不难吧!

接着看啊!

  如果你的最外层的标记是

那么,上面的那个方法你都不用写

展开阅读全文
相关搜索

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1