自定义服务器控件开发之4:重写的支持多验证TextBox控件 续1
去年写了这个东东,发现还是挺好用的,哈哈!不过感觉功能不太满意,于是有增加了些新的功能。
1、增加了输入提示、自定义错误提示、自定义不能为空的提示;
2、增加输入框处于焦点时的样式变化;
3、增加了可自增加行数和减少行数功能;
4、增加了下拉框模式,下拉框可进行数据源的绑定;
去年写了这个东东,发现还是挺好用的,哈哈!不过感觉功能不太满意,于是有增加了些新的功能。
1、增加了输入提示、自定义错误提示、自定义不能为空的提示;
2、增加输入框处于焦点时的样式变化;
3、增加了可自增加行数和减少行数功能;
4、增加了下拉框模式,下拉框可进行数据源的绑定;


由于字符数过多,不能完全粘贴,需要的朋友请下载附件。
https://files.cnblogs.com/nowind/WebTextBox.rar
增加部分源代码如下:
1、增加了输入提示、自定义错误提示、自定义不能为空的提示;
2、增加输入框处于焦点时的样式变化;
3、增加了可自增加行数和减少行数功能;
4、增加了下拉框模式,下拉框可进行数据源的绑定;


由于字符数过多,不能完全粘贴,需要的朋友请下载附件。
https://files.cnblogs.com/nowind/WebTextBox.rar
增加部分源代码如下:
1
//可调整高度
2
if (this.IsRegulateHeight)
3
{
4
#region
5
StringBuilder sbscript = new StringBuilder();
6
sbscript.Append("\n<!--调节输入框高度 begin-->\n");
7
sbscript.Append(" <script type=\"text/javascript\">\n");
8
sbscript.Append(" //Plus\n");
9
sbscript.Append(" function PlusHeight(id)\n");
10
sbscript.Append(" {\n");
11
sbscript.Append(" var txtInput = document.getElementById(id);\n");
12
sbscript.Append(" txtInput.rows = parseInt(txtInput.rows) + " + this.RegulateRows + ";\n");
13
//sbscript.Append(" txtInput.style.height = txtInput.style.height+15;\n");
14
sbscript.Append(" }\n");
15
sbscript.Append(" //Minus\n");
16
sbscript.Append(" function MinusHeight(id)\n");
17
sbscript.Append(" {\n");
18
sbscript.Append(" var txtInput = document.getElementById(id);\n");
19
sbscript.Append(" if( parseInt(txtInput.rows) >= " + (this.RegulateRows + 1) + " )\n");
20
sbscript.Append(" txtInput.rows = parseInt(txtInput.rows) - " + this.RegulateRows + ";\n");
21
sbscript.Append(" }\n");
22
sbscript.Append(" </script>\n");
23
sbscript.Append("<!--调节输入框高度 end-->\n");
24
25
System.Web.UI.ClientScriptManager client = this.Page.ClientScript;
26
Type cstype = Page.GetType();
27
if (!client.IsStartupScriptRegistered(cstype, "regulateheight"))
28
client.RegisterStartupScript(cstype, "regulateheight", sbscript.ToString());
29
30
StringBuilder sbhtml = new StringBuilder();
31
sbhtml.Append("<div style=\"height:24px;\">");
32
sbhtml.Append(" " + this.ImageIconMinus + " " + this.ImageIconPlus);
33
sbhtml.Append("</div>");
34
output.Write(sbhtml.ToString());
35
#endregion
36
}
37
//下拉框模式
38
if (this.HasDropDownList)
39
{
40
#region
41
//已经改为点击输入框的时候激发客户端事件
42
//output.Write("<img id=\"" + this.ClientID + "Icon\" src=\"" + this.ImageIconShowDropDown + "\" border=\"0\" style=\"cursor:hand;\" onclick=\"ShowList('" + this.ClientID + "');\" align=\"absmiddle\" />\n");
43
int width = Convert.ToInt32(base.Width.Value);
44
width = width == 0 ? 100 : width;
45
output.AddAttribute(System.Web.UI.HtmlTextWriterAttribute.Style, "display:none;position:absolute;");
46
output.AddAttribute(System.Web.UI.HtmlTextWriterAttribute.Id, this.ClientID + "List");
47
output.RenderBeginTag(HtmlTextWriterTag.Div);
48
output.AddAttribute(System.Web.UI.HtmlTextWriterAttribute.Style, "margin-left:" + width + "px;");
49
output.RenderBeginTag(HtmlTextWriterTag.Span);
50
51
drpList.ID = base.ID+"Items";
52
drpList.Style.Add("margin-left", "-" + width + "px");
53
drpList.Attributes.Add("onchange", "document.getElementById('" + this.ClientID + "').value=this.options[this.selectedIndex].text;document.getElementById('" + this.ClientID + "List').style.display='none';");
54
//drpList.Attributes.Add("onblur", "this.style.display='none'");
55
if (this.DropDownListDataSource !=null && this.DropDownListDataSource.Rows.Count > 0)
56
{
57
drpList.DataTextField = this.DataTextField;
58
drpList.DataValueField = this.DataValueField;
59
drpList.DataSource = this.DropDownListDataSource.DefaultView;
60
drpList.DataBind();
61
}
62
if(HasDefaultItem)
63
drpList.Items.Insert(0,new ListItem(this.DefaultItemText,this.DefaultItemValue));
64
foreach (ListItem item in drpList.Items)
65
{
66
if (item.Text == base.Text.Trim())
67
{
68
item.Selected = true;
69
break;
70
}
71
}
72
this.drpList.RenderControl(output);
73
output.RenderEndTag();
74
output.RenderEndTag();
75
76
StringBuilder sbscript = new StringBuilder();
77
js内容#region js内容
78
sbscript.Append("\n<script type=\"text/javascript\">\n");
79
sbscript.Append(" <!--下拉框显示隐藏 begin-->\n");
80
sbscript.Append(" function ShowList(id)\n");
81
sbscript.Append(" {\n");
82
sbscript.Append(" var txtInput = document.getElementById(id);\n");
83
sbscript.Append(" var drpList = document.getElementById(id+'List');\n");
84
//sbscript.Append(" var drpIcon = document.getElementById(id+'Icon');\n");
85
sbscript.Append(" var drpItems = document.getElementById(id+'Items');\n"); //下拉框
86
sbscript.Append(" if(drpList.style.display == 'block')\n");
87
sbscript.Append(" {\n");
88
sbscript.Append(" txtInput.title = '点击显示下拉框';\n");
89
sbscript.Append(" drpList.style.display = 'none';\n");
90
//sbscript.Append(" drpIcon.src = '" + this.ImageIconShowDropDown + "';\n");
91
sbscript.Append(" }\n");
92
sbscript.Append(" else\n");
93
sbscript.Append(" {\n");
94
sbscript.Append(" txtInput.title = '点击关闭下拉框';\n");
95
sbscript.Append(" drpList.style.display = 'block';\n");
96
sbscript.Append(" drpList.style.left = GetOffsetLeft(txtInput)+'px';\n");
97
sbscript.Append(" drpList.style.top = (GetOffsetTop(txtInput)+1)+'px';\n");
98
sbscript.Append(" drpItems.style.width = txtInput.offsetWidth+'px';\n");
99
//sbscript.Append(" drpIcon.src = '" + this.ImageIconHideDropDown + "';\n");
100
sbscript.Append(" }\n");
101
sbscript.Append(" }\n");
102
sbscript.Append(" <!--下拉框显示隐藏 end-->\n");
103
sbscript.Append(" function GetOffsetTop(e) \n");
104
sbscript.Append(" {\n");
105
sbscript.Append(" var offsetTop = e.offsetTop;\n");
106
sbscript.Append(" var offsetParent = e.offsetParent;\n");
107
sbscript.Append(" while(offsetParent)\n");
108
sbscript.Append(" {\n");
109
sbscript.Append(" offsetTop += offsetParent.offsetTop;\n");
110
sbscript.Append(" offsetParent = offsetParent.offsetParent;\n");
111
sbscript.Append(" }\n");
112
sbscript.Append(" return offsetTop+e.offsetHeight;\n");
113
sbscript.Append(" }\n");
114
sbscript.Append(" function GetOffsetLeft(e) \n");
115
sbscript.Append(" {\n");
116
sbscript.Append(" var offsetLeft = e.offsetLeft;\n");
117
sbscript.Append(" var offsetParent = e.offsetParent;\n");
118
sbscript.Append(" while(offsetParent) \n");
119
sbscript.Append(" {\n");
120
sbscript.Append(" offsetLeft += offsetParent.offsetLeft;\n");
121
sbscript.Append(" offsetParent = offsetParent.offsetParent;\n");
122
sbscript.Append(" }\n");
123
sbscript.Append(" return offsetLeft;\n");
124
sbscript.Append(" }\n");
125
sbscript.Append("</script>\n");
126
# endregion
127
System.Web.UI.ClientScriptManager client = this.Page.ClientScript;
128
Type cstype = Page.GetType();
129
if (!client.IsStartupScriptRegistered(cstype, "showlist"))
130
client.RegisterStartupScript(cstype, "showlist", sbscript.ToString());
131
132
#endregion
133
}
134

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
