.net 控件开发第二天 怎么将 第一天写的代码 用到 .net中来

前面第一天 我们看到的全是 js的代码,虽然不管是BS的框架是java 还是 php,复用性 还是特别高的,  但是 写起来比较费劲,怎么办,我们能不能 更 简单点呢?

当然可以,这个时候我们就要用到  .net的自定义控件 了。

首先我们 将第一天的代码  回顾一下,(下面我们有了一个初始的改变)

//这里运用的面向对象的思想 ,新建了一个按钮对象
var button = function () {
            this.control = null;   //属性: 按钮对象的 自己
            this.id = null;          //按钮对象的 id
            this.value = null;    //按钮对象显示的值
            this.click = null;      //按钮对象的点击事件
            //接下来是初始化, 所有 按钮的属性
            this.init = function (ClientId) {
                this.id = ClientId;   //这个是页面传过来的id

                var button_html = ‘<div href="#"  id="button_‘+this.id+‘"  class="button" > ‘ + this.value + ‘</div>‘;  // 这个是我们要插入 的 html文件
                this.control.after(button_html);  

               this.control = $("#" + ClientId);  //这是通过 id绑定控件  (有关 需找 标签 都要写到 页面加载完 标签之后执行)
//绑定点击事件  14 $("#button_"+this.id+).unbind("click").bind("click",this.click); 15 this.control.hide(); //隐藏 当前控件 16  }; 17 18 }

  

首先我们建立一个 类库  Control  ,  然后在建立一个 建立一个 ControlBase (  这个类 是所有控件类的 父类)

 public class ControlBase : WebControl    // 继承webControl
    {
        /// <summary>
        /// 加载
        /// </summary>
        /// <param name="e"></param>
        protected override void OnLoad(EventArgs e)    // 重写  页面加载
        {
            base.OnLoad(e);
        }

        /// <summary>
        /// 为指定页面添加一个自定义控件,需要放在 if(!IsPostBack){ } 之外才行。
        /// </summary>
        /// <param name="page">页面</param>
        public static void AddWebcontrolBaseToPage(Page page)
        {
            for (int i = 0; i < page.Controls.Count; i++)
            {
                if (page.Controls[i] is ControlBase)
                {
                    return;
                }
            }
            ControlBase controlbase = new ControlBase();
            page.Controls.Add(controlbase);
        }

        /// <summary>
        /// 注册资源文件
        /// </summary>
        /// <param name="strLink">资源字符串</param>
        /// <param name="control">控件</param>
        public static void RegisterSource(string strLink, System.Web.UI.Control control)
        {
            //为了保证资源只注册一次,循环比较,已存在了就不添加
            bool flag = false;
            for (Int32 i = 0; i < control.Page.Header.Controls.Count; i++)
            {
                LiteralControl lc = control.Page.Header.Controls[i] as LiteralControl;
                if (lc != null)
                {
                    if (lc.Text == strLink)
                    {
                        flag = true;
                        break;
                    }
                }
            }
            if (!flag)
            {
                LiteralControl include = new LiteralControl(strLink);
                control.Page.Header.Controls.Add(include);
            }
        }

        /// <summary>
        /// 控件添加属性
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="Name"></param>
        /// <param name="Value"></param>
        protected void AddAttributeToControl(HtmlTextWriter writer, string Name, string Value)
        {
            if (!string.IsNullOrEmpty(Value))
            {
                writer.AddAttribute(Name, Value);
            }
        }
    }

然后 我们 在建立一个类 ,叫做 Button 的类,写法如下:

 public class Button : ControlBase
    {
        #region 属性
        /// <summary>
        /// 属性测试
        /// </summary>
        [DefaultValue(""), Description("获取或设置页面ID")]
        public string FormID
        {
            get;
            set;
        }

        /// <summary>
        /// 设置页面样式表
        /// </summary>
        public string Class     // 这些属性都会在 页面呈现出来
        {
            get;
            set;
        }
        #endregion

        #region 重载方法
        /// <summary>
        /// 设置装载容器
        /// </summary>
        protected override HtmlTextWriterTag TagKey
        {
            get
            {
                return HtmlTextWriterTag.Div;
            }
        }

        /// <summary>
        /// 控件加载其他操作方法
        /// </summary>
        /// <param name="e"></param>
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
        }

        /// <summary>
        /// 输出控件前操作
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
        }

        /// <summary>
        /// 输出控件
        /// </summary>
        /// <param name="writer"></param>
        protected override void Render(HtmlTextWriter writer)
        {
            base.Render(writer);
            if (this.Visible)
            {
                writer.WriteLine("<script type=‘text/javascript‘>");
                writer.WriteLine("//<![CDATA[");
                string query = this.ClientID + "_ButtonGroup";
                writer.WriteLine("var " + query + "= new Button();");
                writer.WriteLine(query + ".Init(‘" + this.ClientID + "‘,‘加载数据‘)");
                writer.WriteLine("//]]>");
                writer.WriteLine("</script>");
            }
        }

        /// <summary>
        /// 控件中添加控件
        /// </summary>
        /// <param name="writer"></param>
        protected override void RenderContents(HtmlTextWriter writer)
        {
            base.RenderContents(writer);
        }

        /// <summary>
        /// 给控件添加属性
        /// </summary>
        /// <param name="writer"></param>
        protected override void AddAttributesToRender(HtmlTextWriter writer)
        {
            base.AddAttributesToRender(writer);
            writer.AddAttribute("class", "btn_container " + this.Class);
            if (!string.IsNullOrEmpty(this.FormID))
            {
                writer.AddAttribute("FormID", this.FormID);
            }
        }
        #endregion

        #region 自定义方法
        /// <summary>
        /// 获取组织数据
        /// </summary>
        /// <returns></returns>
        private void OtherMethod()
        {

        }
        #endregion
    }

  接下来 我们怎么将她们 用到前台呢?

首先 我们要添加该项目的引用:

然后在配置文件中配置:

如下图所看到的一样:

namespace  表示 添加引用的  项目的   命名空间的地址       如下图:Mycontrol表示 解决方案下的名称 ,Control 表示类库的名称
assembly  表示你需要添加的   引用的地址
tagPrefix  表示你添加 标签 名称:  
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" validateRequest="false">
      <controls>
        <add namespace="Mycontrol.Control" assembly="Control" tagPrefix="BaseControls"/>
      </controls>
    </pages>

  然后我们新建一个 web页面,重新生成一下,打开 工具箱就 可以看到你要的控件了。

或者 直接 输入 <BaseControls:           就能看到你要写的自定义控件了

时间: 2024-08-26 21:34:24

.net 控件开发第二天 怎么将 第一天写的代码 用到 .net中来的相关文章

利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

原文:利用ArcGIS Engine.VS .NET和Windows控件开发GIS应用 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: <安装目录>\DeveloperKit\Samples\Developer_Guide_Scenarios\ ArcGIS_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer 注:ArcGIS样

javascript控件开发之工具栏控件

在前几篇的基础上,本篇将开发工具栏控件,工具栏控件一般包括三部份, 1.toolBar控件,简单说就是工具栏容器, 2.toolButton控件,即工具栏上的按钮控件,该按钮控件包括图标和文字两部份, 3.则是分隔符控件,一般分隔符控件也是在toolButton控件基础上引申出来的, 为了简单易学,我们这里直接用上一篇的控件作为toolBar控件使用,也就是我们这次编写出来的toolButton控件直按放一Panel控件上, 首先在component\ui\文件夹下添加控件文件,com.ui.t

【转载】基于MFC的ActiveX控件开发(1)

原文:http://iysm.net/?p=114 ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC下ActiveX控件的开发可以分为三种,一种是直接用COM的API来开发,这样做显然非常的麻烦,对程序员要求也非常高,因此一般是不予考虑的:一种是基于传统的MFC,采用面向对象的方式将COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功能.MFC为广大VC程序员所熟悉,易于上手学习,但缺点是MFC封装的东西比较

基于MFC的ActiveX控件开发 (转)

ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC下ActiveX控件的开发可以分为三种,一种是直接用COM的API来开发,这样做显然非常的麻烦,对程序员要求也非常高,因此一般是不予考虑的:一种是基于传统的MFC,采用面向对象的方式将COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功能.MFC为广大VC程序员所熟悉,易于上手学习,但缺点是MFC封装的东西比较多,因此用MFC开发出来的控件相对会比较大,因此比较

C#自定义工业控件开发

转自阿凡卢原文C#自定义工业控件开发 由于工作需要,调研过一段时间的工业控制方面的"组态软件"(SCADA)的开发,组态软件常用于自动化工业控制领域,其中包括实时数据采集.数据储存.设备控制和数据展现等功能.其中工控组件的界面展现的实现类似于Windows系统下的各种开发控件,通过各种控件的组装,和硬件协议的集成,就可以实现对相应设备的控制和实时状态的显示. 每个对应的硬件UI展示都可以用一个自定义控件来实现,如下图的一个温度计,就可以使用UserControl来实现. using S

【转载】基于MFC的ActiveX控件开发(3)

原文:http://iysm.net/?p=122 3.事件 ActiveX 控件使用事件通知容器控件上发生了某些事情.事件的常见示例包括单击控件.使用键盘输入数据和控件状态更改.当发生这些操作时,控件将引发事件以提醒容器. MFC 支持两种事件:常用和自定义.常用事件是 COleControl 类自动处理的事件.自定义事件使控件得以在该控件特定的操作发生时通知容器.控件内部状态发生更改或收到某个窗口消息即属于此类事件. 常用事件 常用事件由 COleControl 类自动引发.COleCont

asp.net控件开发基础(1)(转)原文更多内容

asp.net本身提供了很多控件,提供给我们这些比较懒惰的人使用,我认为控件的作用就在此,因为我们不想重复工作,所以要创建它,这个本身便是一个需求的关系,所以学习控件开发很有意思. wrox网站上有本书 Professional ASP.NET 2.0 Server Control and Component Development 现在还没有出版,但网站上放出了代码,所以正好下载过来学习一下. 我看过前几章代码,环环相扣,作者用不同的知识向我们展示同一个效果,所以循序渐进的学下来很有好处. 虽

第一篇:初识ASP.NET控件开发_第一节:控件类及其继承关系

1)System.Web.UI.Control(以下简称Control) Control 类是包括自定义控件.用户控件和页在内的所有 ASP.NET 服务器控件的基类..定义由所有 ASP.NET 服务器控件共享的属性.方法和事件. 命名空间:System.Web.UI程序集:System.Web(在 system.web.dll 中) 2)System.Web.UI.WebControls.WebControl(以下简称WebControl) WebControl 类是 System.Web.

wpf控件开发基础

wpf控件开发基础(3) -属性系统(2) http://www.cnblogs.com/Clingingboy/archive/2010/02/01/1661370.html 这个有必要看看