using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;//自定义web服务器控件-下拉列表namespace MyControls{ ???[DefaultProperty("Text")] ???[ToolboxData("<{0}:MySelect runat=server></{0}:MySelect>")] ???[ParseChildren(true,"Items")] //规定 ???public class MySelect : WebControl ???{ ???????[Bindable(true)] ???????[Category("Appearance")] ???????[DefaultValue("")] ???????[Localizable(true)] ???????public string Text ???????{ ???????????get ???????????{ ???????????????String s = (String)ViewState["Text"]; ???????????????return ((s == null) ? String.Empty : s); ???????????} ???????????set ???????????{ ???????????????ViewState["Text"] = value; ???????????} ???????} ???????[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] //以内容的形式打印标签 ???????public List<SelectItem> Items{ ??????????get{ ???????????if(ViewState["Items"]==null){ ???????????????ViewState["Items"] = new List<SelectItem>(); ???????????} ??????????????return (List<SelectItem>)ViewState["Items"]; ??????????} ???????????set{ ???????????????ViewState["Items"] = value; ???????????} ???????} ???????[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]//以内容的形式打印标签 ???????public Size Size ???????{ ???????????get ???????????{ ???????????????if (ViewState["Size"] == null) ???????????????{ ???????????????????ViewState["Size"] = new Size(); ???????????????} ???????????????return (Size)ViewState["Size"]; ???????????} ???????????set ???????????{ ???????????????ViewState["Size"] = value; ???????????} ???????} ???????public override void RenderBeginTag(HtmlTextWriter writer) ???????{ ???????????this.Style.Add("Width", Size.Width + "px"); //增加样式,宽度 ???????????this.Style.Add("Height", Size.Height + "px"); //增加样式,高度 ???????????base.RenderBeginTag(writer); ???????} ???????protected override HtmlTextWriterTag TagKey ???????{ ???????????get ???????????{ ???????????????return HtmlTextWriterTag.Select;//下拉列表标签 ???????????} ???????} ???????protected override void RenderContents(HtmlTextWriter output) ???????{ ???????????//打印下拉列表内容 ???????????foreach(SelectItem item in Items){ ???????????????output.Write("<option value=‘"+item.Value+"‘>"+item.Text+"</option>"); ???????????} ???????} ???}}
using System;using System.Collections.Generic;using System.Linq;using System.Text;//<!--自定义服务器下拉列表控件的子标签namespace MyControls{ ???public class SelectItem ???{ ???????public string Value { set; get; } //选择的值 ???????public string Text { set; get; } //选择的文本内容 ???????public SelectItem() { } ???????public SelectItem(string text, string value) { ???????????this.Text = text; ???????????this.Value = value; ???????} ???}}
using System;using System.Collections.Generic;using System.Linq;using System.Text; //<cc1:MyButton ID="MyButton1" Size-Height="30" Size-Width="290" ?/>用法,用于这种内部属性//定义一个大小的类,里面包含了宽高namespace MyControls{ ??public class Size ???{ ??????public int Width { set; get; } ??????public int Height { set; get; } ??????public Size(int width,int height) { ??????????this.Width = width; ??????????this.Height = height; ??????} ??????public Size() : this(100,100) { } ???}}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><%@ Register assembly="MyControls" namespace="MyControls" tagprefix="cc1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> ???<title></title></head><body> ???<form id="form1" runat="server"> ???<div> ???<!--自定义服务器下拉列表控件--> ???????<cc1:MySelect Size-Height="100" Size-Width="100" ID="MySelect1" runat="server"> ???????<cc1:SelectItem Value="1" Text="选择一" /> ???????<cc1:SelectItem Value="2" Text="选择二" /> ???????<cc1:SelectItem Value="3" Text="选择三" /> ???????</cc1:MySelect> ???</div> ???</form></body></html>
ASP.NET自定义Web服务器控件-DropDownList/Select下拉列表控件
原文地址:https://www.cnblogs.com/lgx5/p/8320818.html