In previous post I wrote about label control that will generate "true" label tag. Here is more code for that simple control. Now you can assign control (like TextBox) which label will be for. Also AccessKey is rendered as underlined character. Happy using.
1 using System;
2 using System.Web.UI;
3 using System.Web.UI.WebControls;
4 using System.ComponentModel;
5 using System.Text.RegularExpressions;
6
7 [assembly: TagPrefix("LazyDeveloper.Web.UI.Webcontrols", "LazyDeveloper")]
8 namespace LazyDeveloper.Web.UI.Webcontrols
9 {
10 [
11 ToolboxData("<{0}:FormLabel runat=\"server\" Text=\"Label\">"),
12 Designer("System.Web.UI.Design.WebControls.LabelDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"),
13 DataBindingHandler("System.Web.UI.Design.TextDataBindingHandler, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"),
14 DefaultProperty("Text"),
15 ControlValueProperty("Text"),
16 ParseChildren(false),
17 ControlBuilder(typeof(LabelControlBuilder)),
18 ]
19 public class FormLabel : Label
20 {
21 protected override void RenderContents(HtmlTextWriter writer)
22 {
23 if (AccessKey != "")
24 {
25 Regex re = new Regex(AccessKey, RegexOptions.IgnoreCase | RegexOptions.Multiline);
26 MatchCollection matches = re.Matches(Text);
27 if (matches.Count > 0)
28 {
29 string aKey = matches[0].Value;
30 Text = re.Replace(Text, "" + aKey + "", 1);
31 }
32 }
33 writer.Write(Text);
34 }
35 protected override void AddAttributesToRender(HtmlTextWriter writer)
36 {
37 base.AddAttributesToRender(writer);
38 if (For != "")
39 {
40 writer.AddAttribute(HtmlTextWriterAttribute.For, For);
41 }
42 }
43 public override void RenderBeginTag(System.Web.UI.HtmlTextWriter writer)
44 {
45 AddAttributesToRender(writer);
46 writer.RenderBeginTag("label");
47 }
48 public override void RenderEndTag(System.Web.UI.HtmlTextWriter writer)
49 {
50 writer.RenderEndTag();
51 }
52
53 [
54 TypeConverter(typeof(ControlIDConverter)),
55 IDReferenceProperty,
56 Description("Label_For"),
57 DefaultValue(""),
58 Category("Behavior"),
59 ThemeableAttribute (false)
60 ]
61 public string For
62 {
63 get
64 {
65 string forControl = (string)ViewState["For"];
66 if (forControl != null)
67 {
68 return forControl;
69 }
70 return string.Empty;
71 }
72 set
73 {
74 ViewState["For"] = value;
75 }
76 }
77 }
78 }