(一). 概述
通过制作一个<计算器>功能自定义复合控件演示复合控件的制作
(二). 代码
1. 核心控件实现代码文件ComputeControl.cs
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Text;
4
using
System.Web;
5
using
System.Web.UI;
6
using
System.Web.UI.WebControls;
7
8
namespace
KingControls
9
{ 10 public class ComputeControl : System.Web.UI.WebControls.CompositeControl 11 { 12 //操作数 13 private TextBox tb1; 14 private TextBox tb2; 15 16 //显示结果 17 private Label lb; 18 19 //操作(+-*/) 20 private Button bt1; 21 private Button bt2; 22 private Button bt3; 23 private Button bt4; 24 25 protected override void CreateChildControls() 26 { 27 tb1 = new TextBox(); 28 tb1.ID = "TextBox1"; 29 this.Controls.Add( tb1 ); 30 31 tb2 = new TextBox(); 32 tb2.ID = "TextBox2"; 33 this.Controls.Add(tb2); 34 35 lb = new Label(); 36 lb.ID = "Label1"; 37 lb.BackColor = System.Drawing.Color.YellowGreen; 38 lb.Text = "Result: "; 39 this.Controls.Add( lb ); 40 41 bt1 = new Button(); 42 bt1.ID = "Button1"; 43 bt1.Text = "+"; 44 bt1.CommandArgument = "+"; 45 bt1.Click += new EventHandler(bt_Click); 46 this.Controls.Add( bt1 ); 47 bt2 = new Button(); 48 bt2.ID = "Button2"; 49 bt2.Text = "-"; 50 bt2.CommandArgument = "-"; 51 bt2.Click += new EventHandler(bt_Click); 52 this.Controls.Add(bt2); 53 bt3 = new Button(); 54 bt3.ID = "Button3"; 55 bt3.Text = "*"; 56 bt3.CommandArgument = "*"; 57 bt3.Click += new EventHandler(bt_Click); 58 this.Controls.Add(bt3); 59 bt4 = new Button(); 60 bt4.ID = "Button4"; 61 bt4.Text = "/"; 62 bt4.CommandArgument = "/"; 63 bt4.Click += new EventHandler(bt_Click); 64 this.Controls.Add(bt4); 65 } 66 67 void bt_Click(object sender, EventArgs e) 68 { 69 try 70 { 71 if ("Result: " != lb.Text) 72 { 73 lb.Text = lb.Text + ", "; 74 } 75 switch( ((Button)sender).CommandArgument ) 76 { 77 case "+": lb.Text = lb.Text + Convert.ToString(Convert.ToInt32(this.tb1.Text) + Convert.ToInt32(this.tb2.Text)); break; 78 case "-": lb.Text = lb.Text + Convert.ToString(Convert.ToInt32(this.tb1.Text) - Convert.ToInt32(this.tb2.Text)); break; 79 case "*": lb.Text = lb.Text + Convert.ToString(Convert.ToInt32(this.tb1.Text) * Convert.ToInt32(this.tb2.Text)); break; 80 case "/": lb.Text = lb.Text + Convert.ToString(Convert.ToInt32(this.tb1.Text) / Convert.ToInt32(this.tb2.Text)); break; 81 } 82 } 83 catch 84 { 85 lb.Text = "It's is not right format, please input again."; 86 } 87 } 88 89 protected override void RenderContents(HtmlTextWriter output) 90 { 91 output.Write("a"); 92 93 } 94 95 protected override void Render(HtmlTextWriter writer) 96 { 97 writer.RenderBeginTag(HtmlTextWriterTag.Table); 98 99 //Operating item 1100 writer.RenderBeginTag(HtmlTextWriterTag.Tr);101 writer.RenderBeginTag(HtmlTextWriterTag.Td);102 tb1.RenderControl(writer);103 writer.RenderEndTag();104 writer.RenderEndTag();105 106 //<br>107 writer.WriteBreak();108109 //Operating symbol110 writer.RenderBeginTag(HtmlTextWriterTag.Tr);111 writer.RenderBeginTag(HtmlTextWriterTag.Td);112 writer.WriteEncodedText(" + - * / ");113 writer.RenderEndTag();114 writer.RenderEndTag();115116 //Operating item2117 writer.RenderBeginTag(HtmlTextWriterTag.Tr);118 writer.RenderBeginTag(HtmlTextWriterTag.Td);119 tb2.RenderControl(writer);120 writer.RenderEndTag();121 writer.RenderEndTag();122123 //Operating symbol124 writer.RenderBeginTag(HtmlTextWriterTag.Tr);125 writer.RenderBeginTag(HtmlTextWriterTag.Td);126 writer.WriteEncodedText(" EQUAL ");127 writer.RenderEndTag();128 writer.RenderEndTag();129130 //The relust label131 writer.RenderBeginTag(HtmlTextWriterTag.Tr);132 writer.RenderBeginTag(HtmlTextWriterTag.Td);133 lb.RenderControl(writer);134 writer.RenderEndTag();135 writer.RenderEndTag();136137 //Button1138 writer.RenderBeginTag(HtmlTextWriterTag.Tr);139 writer.RenderBeginTag(HtmlTextWriterTag.Nobr);140 writer.RenderBeginTag(HtmlTextWriterTag.Td);141 bt1.RenderControl(writer); 142 bt2.RenderControl(writer); 143 bt3.RenderControl(writer); 144 bt4.RenderControl(writer);145 writer.RenderEndTag();146 writer.RenderEndTag();147148 writer.RenderEndTag();149 }150 }151}
152
2. 前台页面代码 UsingCompositeControl.aspx (使用方法)
1
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
UsingCompositeControl.aspx.cs
"
Inherits
=
"
UsingCompositeControl
"
%>
2
<%
@ Register Assembly
=
"
KingControls
"
Namespace
=
"
KingControls
"
TagPrefix
=
"
KSP
"
%>
3
… …
4
<
KSP:ComputeControl ID
=
"
compute1
"
runat
=
"
server
"
/>
5
… …
6
(三). 示例代码下载
http://www.cnblogs.com/Files/ChengKing/KingControls.rar