自定义控件的实现

[DefaultProperty("Text")]//(打开属性时)默认选择的属性
    [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1>")]//自定义服务器控件在页面上面显示的标记
    public class ServerControl1 : WebControl
    {
        [Bindable(true)]//是否通常绑定
        [Category("外观")]
        [DefaultValue("")]
        [Description("显示的文本")]//属性的描述
        [Localizable(true)]
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? "[" + this.ID + "]" : s);
            }

            set
            {
                ViewState["Text"] = value;
            }
        }
        private string imageurl;
        [Description("要显示图片的路径")]//属性的描述
        [Category("样式")]
        [EditorAttribute(typeof(ImageUrlEditor), typeof(UITypeEditor))]//让属性里面有选择图片的按钮”...“
        public string Imageurl
        {
            get { return imageurl; }
            set { imageurl = value; }
        }
        [Bindable(true)]//是否通常绑定
        [Category("字体")]
        [DefaultValue("")]
        [Description("设置文本框的字体的大小单位为px")]//属性的描述
        [Localizable(true)]
        public string Fontsize
        {
            get
            {
                String font = (String)ViewState["Fontsize"];
                return ((font == null) ? "14px" : font + "px");
            }
            set { ViewState["Fontsize"] = value; }
        }
        protected override void Render(HtmlTextWriter Write)
        {
            string path = "";
            if (imageurl != null)
            {
                path = this.ResolveClientUrl(Imageurl);//取图片路径对应的在客户端的路径
            }
            WebColorConverter wcolor = new WebColorConverter();//进行颜色转换为RGB格式//在RGB和color间切换的对象
            Write.Write("<input type=\"text\" id=\"" + this.ID + "\" name=\"" + this.ID + "\" style=\"background-color:" + wcolor.ConvertToString(base.BackColor) + " ;background-image:url(" + path + "); font-size:" + Fontsize + "\" value=\"");
            Write.Write(Text);
            Write.Write("\"/>");
        }
    }
posted @   易独  阅读(196)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
乐巴儿 一个有声音的公众号
长按,识别二维码,加关注
点击右上角即可分享
微信分享提示