100165706.htm

来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 190 行

HTM
190
字号


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
	
        27.3.2  StrawPoll控件构建器
</title></head>
<body>
    <div class="area">

        

        <div class="col1">
            <div class="lineBlue">
            </div>
            <!-- title -->
            <div class="arcTitle">
                <h1>
                    <a href="../16">
                        C#高级编程(第3版)
                    </a>
                </h1>
                <div style="text-align: center; font-size: 15px">
                    <a href="100165706.htm">
                        27.3.2  StrawPoll控件构建器
                    </a>
                </div>
                <div style="text-align: center; font-size: 15px">
                    <a class="url" href="../../default.htm">http://book.csdn.net/</a>
                    2006-10-13 14:41:00
                </div>
                <div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
                    <div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
                        图书导读
                    </div>
                    <div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
                        <!--导读-->
                        <h1 id="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165706.htm'><font color='red'>27.3.2  StrawPoll控件构建器</font></a></h1>
                        <div id="divRelateNode" style="padding-left: 2px">
                        <div style='float:left;width:49%'>·<a href='100165703.htm'>27.2.3  创建合成的定制控件</a></div><div style='float:right;width:49%'>·<a href='100165704.htm'>27.3  测验民意的投票控件</a></div><div style='float:left;width:49%'>·<a href='100165705.htm'>27.3.1  Candidate 控件</a></div><div style='float:right;width:49%'>·<a href='100165707.htm'>27.3.3  测试民意的投票类型</a></div><div style='float:left;width:49%'>·<a href='100165708.htm'>27.3.4  测试民意的投票控件</a></div><div style='float:right;width:49%'>·<a href='100165709.htm'>27.4  小结</a></div></div>
                    </div>
                </div>
                </div>
            <!-- main -->
            <div id="main">
                <div id="text">
                  <div id="csdn_zhaig_ad_yahoo_2"></div>
                  
                 <link href="css.css" rel="stylesheet" type="text/css" /><h3 style='margin-top:8.15pt;margin-right:0cm;FTEL:8.15pt;margin-left:
0cm'><span lang=EN-US>27.3.2&nbsp; StrawPoll</span><span style='font-family:
黑体'>控件构建器</span><span lang=EN-US>&nbsp; </span></h3>

<p class=MsoNormal><span style='font-family:宋体'>接下来就讨论如何把每个选项的</span><span
lang=EN-US>ASP.NET</span><span style='font-family:宋体'>代码转化为</span><span
lang=EN-US>StarwPoll</span><span style='font-family:宋体'>控件的子控件。为此,需要使用</span><span
lang=EN-US>ControlBuilderAttribute</span><span style='font-family:宋体'>属性把控件构建器与</span><span
lang=EN-US>StrawPoll</span><span style='font-family:宋体'>类联系起来。还需要把</span><span
lang=EN-US>ParseChildren</span><span style='font-family:宋体'>属性设置为</span><span
lang=EN-US>false</span><span style='font-family:宋体'>,指定不应把该子控件分析为</span><span
lang=EN-US>StrawPoll</span><span style='font-family:宋体'>类的属性:</span></p>

<p class=2 style='margin-top:6.5pt;margin-right:0cm;FTEL:0cm;
margin-left:21.45pt;FTEL:.0001pt;FTEL:18.45pt'><span
lang=EN-US>&nbsp;&nbsp; [
ControlBuilderAttribute(typeof(StrawPollControlBuilder)) ]</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
[ ParseChildren(false) ]</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
public class StrawPoll : System.Web.UI.WebControls.WebControl,</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
INamingContainer</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
{</span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:6.5pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp; }</span></p>

<p class=MsoNormal><span style='font-family:宋体'>这里使用一个名称为</span><span
lang=EN-US>StarwPollControlBuilder</span><span style='font-family:宋体'>的类,这个类在</span><span
lang=EN-US>StrawPollControlBuilder.cs</span><span style='font-family:宋体'>中定义,如下所示:</span></p>

<p class=2 style='margin-top:6.5pt;margin-right:0cm;FTEL:0cm;
margin-left:21.45pt;FTEL:.0001pt;FTEL:18.45pt'><span
lang=EN-US>&nbsp;&nbsp; internal class StrawPollControlBuilder : ControlBuilder</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp; {</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override Type
GetChildControlType(string tagName,</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
IDictionary attribs)</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (tagName.ToLower().EndsWith(&quot;candidate&quot;))</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return typeof(Candidate);</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void
AppendLiteralString(string s)</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Do nothing, to
avoid embedded text being added to control</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:6.5pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp; }</span></p>

<p class=MsoNormal><span style='font-family:宋体'>本例重写基类</span><span lang=EN-US>ControlBuilder</span><span
style='font-family:宋体'>的</span><span lang=EN-US>GetChildControlType()</span><span
style='font-family:宋体'>方法,返回</span><span lang=EN-US>Candidate</span><span
style='font-family:宋体'>类的类型,响应名称为</span><span lang=EN-US>&lt;Candidate&gt;</span><span
style='font-family:宋体'>的标记。事实上,为了确保在尽可能多的情况下都能顺利工作,我们要寻找以字符串</span><span
lang=EN-US>“Candidate”</span><span style='font-family:宋体'>结尾的标记名,这里不考虑</span><span
lang=EN-US>Candidate</span><span style='font-family:宋体'>的大小写。</span></p>

<p class=MsoNormal><span style='font-family:宋体'>此外,也重写</span><span lang=EN-US>AppendLiteralString()</span><span
style='font-family:宋体'>方法,忽略所有插入的文本,包括空白格,进而确保不会出现问题。</span></p>

<p class=MsoNormal><span style='font-family:宋体'>设置好之后,假定在</span><span
lang=EN-US>StrawPoll</span><span style='font-family:宋体'>中不包含其他的控件,则</span><span
lang=EN-US>StrawPoll</span><span style='font-family:宋体'>的</span><span
lang=EN-US>Contrlos</span><span style='font-family:宋体'>集合中包含所有的</span><span
lang=EN-US>Candidate</span><span style='font-family:宋体'>控件,而不会包含其他的控件。</span></p>

<p class=MsoNormal><span style='font-family:宋体'>注意,控件构建器利用了属性的集合。为了对此进行支持,需要给命名空间添加如下</span><span
lang=EN-US>using</span><span style='font-family:宋体'>语句:</span></p>

<p class=a6 style='margin-top:8.15pt;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt;background:#F2F2F2'><span lang=EN-US>&nbsp;&nbsp;
using System.Collections;</span></p>

</div>
                <!-- page -->
                <div class="page" style="text-align: center">
                    <a href="100165705.htm">上一页</a>&nbsp;&nbsp;&nbsp;<a href="index.html">首页</a>&nbsp;&nbsp;&nbsp;<a href="100165707.htm">下一页</a>
                </div>
                <div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
                    <div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
                        图书导读
                    </div>
                    <div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
                        <!--导读-->
                        <h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165706.htm'><font color='red'>27.3.2  StrawPoll控件构建器</font></a></h1>
                        <div id="divRealteNod2" style="padding-left: 2px">
                        <div style='float:left;width:49%'>·<a href='100165703.htm'>27.2.3  创建合成的定制控件</a></div><div style='float:right;width:49%'>·<a href='100165704.htm'>27.3  测验民意的投票控件</a></div><div style='float:left;width:49%'>·<a href='100165705.htm'>27.3.1  Candidate 控件</a></div><div style='float:right;width:49%'>·<a href='100165707.htm'>27.3.3  测试民意的投票类型</a></div><div style='float:left;width:49%'>·<a href='100165708.htm'>27.3.4  测试民意的投票控件</a></div><div style='float:right;width:49%'>·<a href='100165709.htm'>27.4  小结</a></div></div>
                    </div>
                </div>
                </div>
            <!-- 评论 -->
            <!-- 今日推荐 -->
            </div>
        <!-- 页脚 -->
        <div id="foot">
         <img src="../../book/readbook.aspx@node=5706&bookid=16&bookname=27.3.2++StrawPoll_25bf_25d8_25bc_25fe_25b9_25b9_25bd_25a8_25c6_25f7" alt="" width="0" height="0" />
        <style>

        </div>
</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?