(一). 概述
通过制作一个<计算器>功能自定义复合控件演示复合控件的制作
(二). 代码
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 1
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
//Operating symbol
110
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
111
writer.RenderBeginTag(HtmlTextWriterTag.Td);
112
writer.WriteEncodedText(" + - * / ");
113
writer.RenderEndTag();
114
writer.RenderEndTag();
115
116
//Operating item2
117
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
118
writer.RenderBeginTag(HtmlTextWriterTag.Td);
119
tb2.RenderControl(writer);
120
writer.RenderEndTag();
121
writer.RenderEndTag();
122
123
//Operating symbol
124
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
125
writer.RenderBeginTag(HtmlTextWriterTag.Td);
126
writer.WriteEncodedText(" EQUAL ");
127
writer.RenderEndTag();
128
writer.RenderEndTag();
129
130
//The relust label
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
<%
@ 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

2

3

4

5

6

(三). 示例代码下载