Отрисовка (Rendering) элемента управления
В этом примере построен элемент управления, наследующий от Label. Он раскрашивает текст в случайные цвета. Свойство EnableRainbowMode можно отключить, тогда он станет вести себя как обычная метка:
[ToolboxData("<{0}:RainbowLabel runat=server></{0}:RainbowLabel>")] public class RainbowLabel : Label { [Bindable(true)] [Category("Appearance")] [DefaultValue("true")] [Localizable(true)] public bool EnableRainbowMode { get { if (ViewState["EnableRainbowMode"] == null) return true; else return bool.Parse(ViewState["EnableRainbowMode"].ToString()); } set { ViewState["EnableRainbowMode"] = value; } }
protected override void RenderContents(HtmlTextWriter output) { if(EnableRainbowMode) output.Write(ColorizeString(Text)); else output.Write(Text); } private string ColorizeString(string input) { StringBuilder output = new StringBuilder(input.Length); Random rand = new Random(DateTime.Now.Millisecond);
for (int i = 0; i < input.Length; i++) { int color = rand.Next(0xffffff); string strColor = string.Format(@"<span style=""color: #{0:x}"">", color); output.Append(strColor); output.Append(input.Substring(i, 1)); output.Append("</span>"); } return output.ToString(); } }