最近在看那一本下载N久的《asp.net高级编程》,这才发现,原来好东西都被我埋没了!确实学到了好多东西,对以前不理解的东西有了一种顿 悟的感觉!早就想自己开发一个自己的控件让人家用了.可能水平太水了.终于发现这本书里面有讲到.临时做了一个现成的例子,总算成功! 其实就是一个文本框,添加一个ontextchane事件!废说不说了.来点实在的吧:(代码虽少,理解以后你就强了) 打开VS.NET 2005 新建一个组件类,重命名为:mytext,添加代码: Imports System Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Collections.Specialized Namespace Mytextspace '这个将是后来的引用名 Public Class MyTextBoxVB '这个将是后台的控件名(在控件栏里面的名字) Inherits WebControl '继承webcontrol类,(这样才能扩展服务器控件呀) Implements IPostBackDataHandler '继承自动加载回发数据接口(这样才能安全的触发的事件呀) Public Sub New() MyBase.New("input") '构造函数,初始化类,带"input"参数 End Sub
Public Event TextChanged As EventHandler '定义一个事件TextChanged Private _value As String Public ReadOnly Property text() As String '定义一个属性 Get Return _value End Get End Property
'覆盖addAttiibuteToRender方法,输出在页面上显示的内容
Protected Overrides Sub addAttributesToRender(ByVal writer As HtmlTextWriter) MyBase.AddAttributesToRender(writer) writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID) writer.AddAttribute(HtmlTextWriterAttribute.Type, "input") If Not (_value Is Nothing) Then writer.AddAttribute("value", _value) End If End Sub '继承接口方法LoadPostData1,设置返回值为:ture,这样RaisePostDataChangedEvent1才有有效. Public Function LoadPostData1(ByVal postDataKey As String, ByVal postCollection As System.Collections.Specialized.NameValueCollection) As Boolean Implements System.Web.UI.IPostBackDataHandler.LoadPostData _value = postCollection(postDataKey) Return True End Function '触发事件RaiseEvent Public Sub RaisePostDataChangedEvent1() Implements System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent RaiseEvent TextChanged(Me, EventArgs.Empty) End Sub End Class End Namespace 最后还有一步很重要的步骤就是编译.这样别人才能使用的你开的控件(感觉真好),你可以在vs.net2005直接点生成,当然生成之前你也可设置一些版本信息,参数什么的.比较有个性化特征,以防盗版,你也可以使用命令,格式如下: vbc /out:bin/mytext.dll /t:library mytext.vb /r:system.dll /r:system.data.dll /r:system.xml.dll vbc:编译vb类的方法,C#用csc /out:输入文件名.我这里用ymtext.dll /t:t就是target的意思.也就是目标文件可以写绝对路径如:"f:/swda/app_code/mytext.vb" /r:添加引用程序集,常用的有:system.dll,system.data.dll,system.xml.dll你也可以使用绝对路径如::"f:/swda/bin/ajax.dll" 输出完成之后在程序里面添加引用.拖入控件栏就可以使用了呀!!开心吧!!哈哈 |