(一). 概述
通过制作一个<计算器>功能自定义复合控件演示复合控件的制作
(二). 代码
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
publicclassComputeControl:System.Web.UI.WebControls.CompositeControl
11

{
12
//操作数
13
privateTextBoxtb1;
14
privateTextBoxtb2;
15
16
//显示结果
17
privateLabellb;
18
19
//操作(+-*/)
20
privateButtonbt1;
21
privateButtonbt2;
22
privateButtonbt3;
23
privateButtonbt4;
24
25
protectedoverridevoidCreateChildControls()
26

{
27
tb1=newTextBox();
28
tb1.ID="TextBox1";
29
this.Controls.Add(tb1);
30
31
tb2=newTextBox();
32
tb2.ID="TextBox2";
33
this.Controls.Add(tb2);
34
35
lb=newLabel();
36
lb.ID="Label1";
37
lb.BackColor=System.Drawing.Color.YellowGreen;
38
lb.Text="Result:";
39
this.Controls.Add(lb);
40
41
bt1=newButton();
42
bt1.ID="Button1";
43
bt1.Text="+";
44
bt1.CommandArgument="+";
45
bt1.Click+=newEventHandler(bt_Click);
46
this.Controls.Add(bt1);
47
bt2=newButton();
48
bt2.ID="Button2";
49
bt2.Text="-";
50
bt2.CommandArgument="-";
51
bt2.Click+=newEventHandler(bt_Click);
52
this.Controls.Add(bt2);
53
bt3=newButton();
54
bt3.ID="Button3";
55
bt3.Text="*";
56
bt3.CommandArgument="*";
57
bt3.Click+=newEventHandler(bt_Click);
58
this.Controls.Add(bt3);
59
bt4=newButton();
60
bt4.ID="Button4";
61
bt4.Text="/";
62
bt4.CommandArgument="/";
63
bt4.Click+=newEventHandler(bt_Click);
64
this.Controls.Add(bt4);
65
}
66
67
voidbt_Click(objectsender,EventArgse)
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'sisnotrightformat,pleaseinputagain.";
86
}
87
}
88
89
protectedoverridevoidRenderContents(HtmlTextWriteroutput)
90

{
91
output.Write("a");
92
93
}
94
95
protectedoverridevoidRender(HtmlTextWriterwriter)
96

{
97
writer.RenderBeginTag(HtmlTextWriterTag.Table);
98
99
//Operatingitem1
100
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();
108
109
//Operatingsymbol
110
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
111
writer.RenderBeginTag(HtmlTextWriterTag.Td);
112
writer.WriteEncodedText("+-*/");
113
writer.RenderEndTag();
114
writer.RenderEndTag();
115
116
//Operatingitem2
117
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
118
writer.RenderBeginTag(HtmlTextWriterTag.Td);
119
tb2.RenderControl(writer);
120
writer.RenderEndTag();
121
writer.RenderEndTag();
122
123
//Operatingsymbol
124
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
125
writer.RenderBeginTag(HtmlTextWriterTag.Td);
126
writer.WriteEncodedText("EQUAL");
127
writer.RenderEndTag();
128
writer.RenderEndTag();
129
130
//Therelustlabel
131
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
132
writer.RenderBeginTag(HtmlTextWriterTag.Td);
133
lb.RenderControl(writer);
134
writer.RenderEndTag();
135
writer.RenderEndTag();
136
137
//Button1
138
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();
147
148
writer.RenderEndTag();
149
}
150
}
151
}
152

2

3

4

5

6

7

8

9



10

11



12

13

14

15

16

17

18

19

20

21

22

23

24

25

26



27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68



69

70



71

72



73

74

75

76



77

78

79

80

81

82

83

84



85

86

87

88

89

90



91

92

93

94

95

96



97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

2. 前台页面代码 UsingCompositeControl.aspx (使用方法)
1
<%
@PageLanguage
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
UsingCompositeControl.aspx.cs
"
Inherits
=
"
UsingCompositeControl
"
%>
2
<%
@RegisterAssembly
=
"
KingControls
"
Namespace
=
"
KingControls
"
TagPrefix
=
"
KSP
"
%>
3
……
4
<
KSP:ComputeControlID
=
"
compute1
"
runat
=
"
server
"
/>
5
……
6

2

3

4

5

6

(三). 示例代码下载