对不起,我今天不能开MSN,所以就不能发给你了,我只能在CSDN上开一张贴,发给你。控件我修正了一点,代码也给你简化了一些,一般做控件你的代码可以了,不过如果你还要加子控件的话,你可以在CREATECHILDCONTROL中加入你要的控件。
在RENDER中要加一个ME。ENSURECHILDCONTROL(),这句话是判断是不是创件了子控件,如果没有的话,它会到CREATECHILDCONTROL这个SUB中执行记住有的控件还要加BUILDER和DESIGN
其他的要你自己摸索,不过你可以看看我的BLOG上的那些控件,那写比较的经典。
定时刷新页面控件(hackate),修正后的代码:
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Collections
Imports System.Text
Imports System.ComponentModel
Imports Microsoft.VisualBasic<DefaultProperty("Text"), DefaultEvent("Timer"), ToolboxData("<{0}:setTimeoutControl runat=server></{0}:setTimeoutControl>")> Public Class setTimeoutControl
Inherits System.Web.UI.WebControls.WebControl
Implements IPostBackEventHandler
Private Shared EventTimer As Object = New Object
Public Event Timer As EventHandler#Region "Property"
Public Overrides Property Visible() As Boolean
Get
Return MyBase.Visible
End Get
Set(ByVal Value As Boolean)
MyBase.Visible = Value
End Set
End Property Public Overrides Property Width() As System.Web.UI.WebControls.Unit
Get
Return MyBase.Width
End Get
Set(ByVal Value As System.Web.UI.WebControls.Unit)
MyBase.Width = Value
End Set
End Property Public Overrides Property Height() As System.Web.UI.WebControls.Unit
Get
Return MyBase.Height
End Get
Set(ByVal Value As System.Web.UI.WebControls.Unit)
MyBase.Height = Value
End Set
End Property <DefaultValue(3000), Bindable(False), Description("duration millisecound")> Public Property Interval() As Integer
Get
Return viewstate("_interval")
End Get
Set(ByVal Value As Integer)
viewstate("_interval") = Value
End Set
End Property <DefaultValue(False), Bindable(False), Description("Enabled Timer")> Public Overrides Property Enabled() As Boolean
Get
Return MyBase.Enabled
End Get
Set(ByVal Value As Boolean)
MyBase.Enabled = Value
End Set
End Property
#End Region Protected Overridable Sub OnTimer(ByVal e As EventArgs)
RaiseEvent Timer(Me, e)
End Sub Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
If eventArgument = "OnTimer" Then
OnTimer(EventArgs.Empty)
End If
End Sub Private Function bulidJavaScript() As String
Dim sb As StringBuilder = New StringBuilder
sb.Append(Chr(10) & "<script language='javascript'>")
sb.Append(Chr(10) & " setTimeout(""" & Me.Page.GetPostBackEventReference(Me, "OnTimer") & """," & viewstate("_interval").ToString & ");")
sb.Append(Chr(10) & "</script>")
Return sb.ToString
End Function Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
Me.EnsureChildControls()
If MyBase.Enabled = True Then
output.Write(bulidJavaScript)
MyBase.Render(output)
End If
End Sub Public Sub New()
MyBase.Height = System.Web.UI.WebControls.Unit.Pixel(10)
MyBase.Width = System.Web.UI.WebControls.Unit.Pixel(120)
Me.Interval = 3000
End Sub
End Class
在RENDER中要加一个ME。ENSURECHILDCONTROL(),这句话是判断是不是创件了子控件,如果没有的话,它会到CREATECHILDCONTROL这个SUB中执行记住有的控件还要加BUILDER和DESIGN
其他的要你自己摸索,不过你可以看看我的BLOG上的那些控件,那写比较的经典。
定时刷新页面控件(hackate),修正后的代码:
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Collections
Imports System.Text
Imports System.ComponentModel
Imports Microsoft.VisualBasic<DefaultProperty("Text"), DefaultEvent("Timer"), ToolboxData("<{0}:setTimeoutControl runat=server></{0}:setTimeoutControl>")> Public Class setTimeoutControl
Inherits System.Web.UI.WebControls.WebControl
Implements IPostBackEventHandler
Private Shared EventTimer As Object = New Object
Public Event Timer As EventHandler#Region "Property"
Public Overrides Property Visible() As Boolean
Get
Return MyBase.Visible
End Get
Set(ByVal Value As Boolean)
MyBase.Visible = Value
End Set
End Property Public Overrides Property Width() As System.Web.UI.WebControls.Unit
Get
Return MyBase.Width
End Get
Set(ByVal Value As System.Web.UI.WebControls.Unit)
MyBase.Width = Value
End Set
End Property Public Overrides Property Height() As System.Web.UI.WebControls.Unit
Get
Return MyBase.Height
End Get
Set(ByVal Value As System.Web.UI.WebControls.Unit)
MyBase.Height = Value
End Set
End Property <DefaultValue(3000), Bindable(False), Description("duration millisecound")> Public Property Interval() As Integer
Get
Return viewstate("_interval")
End Get
Set(ByVal Value As Integer)
viewstate("_interval") = Value
End Set
End Property <DefaultValue(False), Bindable(False), Description("Enabled Timer")> Public Overrides Property Enabled() As Boolean
Get
Return MyBase.Enabled
End Get
Set(ByVal Value As Boolean)
MyBase.Enabled = Value
End Set
End Property
#End Region Protected Overridable Sub OnTimer(ByVal e As EventArgs)
RaiseEvent Timer(Me, e)
End Sub Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
If eventArgument = "OnTimer" Then
OnTimer(EventArgs.Empty)
End If
End Sub Private Function bulidJavaScript() As String
Dim sb As StringBuilder = New StringBuilder
sb.Append(Chr(10) & "<script language='javascript'>")
sb.Append(Chr(10) & " setTimeout(""" & Me.Page.GetPostBackEventReference(Me, "OnTimer") & """," & viewstate("_interval").ToString & ");")
sb.Append(Chr(10) & "</script>")
Return sb.ToString
End Function Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
Me.EnsureChildControls()
If MyBase.Enabled = True Then
output.Write(bulidJavaScript)
MyBase.Render(output)
End If
End Sub Public Sub New()
MyBase.Height = System.Web.UI.WebControls.Unit.Pixel(10)
MyBase.Width = System.Web.UI.WebControls.Unit.Pixel(120)
Me.Interval = 3000
End Sub
End Class
解决方案 »
- 两个GridView之间的数据转移
- 7万行数据,用NHibernate做的分页绑定,加一个Order by,NND,30秒都不显示.去掉ORDER BY 2,3秒就出来了.什么态度
- 写方案啊谁给点SQLSERVER,ORACLE的资料,100分!
- “工作流”怎么利用设计模式规范代码
- #########c#windows编程中listview控件怎么去设置每项的图标?大家帮忙了!##############
- 怎样在ASP里使用select count(*)显示统计出不为空的id数量和id的值
- 奇怪问题:iis的ip地址哪里去了?
- 读取html模版的问题
- 在操作Access数据库时总是说出错, 不知为什么,
- datagrid问题,在线等待
- 如何传递一个树形结构
- 如何成为microsoft的MVP!防区打入非技术,得问一个问题:说说权限的设计思路(asp.net)C#
那么用webcontrol是可以达到效果。然后用了webcontrol基类后应该还可以重写onprerender方法。这里为何要用viewstate取代呢?
我之所以用VIEWSTATE,就是为了你在页面中调用的时候数据不丢失,以前我做的时候也是用变量,不过发现在页面中调用的时候,尤其是在后台代码中改变他的属性时候:例如:setTimeoutControl .Interval=1200你虽然改变了,但是页面一提交,你就会发现你改动的值不见了,还是你在设计阶段设置属性设置的值还有如果你将来用到复合控件的话,记得要对CONTROLS这个属性要重载,不然你也会发现很多的问题,比如数据丢失等等
Public Sub New()
MyBase.Height = System.Web.UI.WebControls.Unit.Pixel(10)
MyBase.Width = System.Web.UI.WebControls.Unit.Pixel(120)
Me.Interval = 3000
End Sub
构造函数的执行顺序呢,这个我不知道他的执行顺序是怎么样的,我是说他在控件生命周期里,没见到它的影子,他在这里具体扮演的是什么一个角色呢?
一般这里new里面的代码都写在页面上面。。能解释下吗?rick大哥,我比较笨
在设计阶段包括:你从工具栏中拖控件到页面上,这个时候,它会进NEW这个SUB,把控件的属性等等初始化一下,
运行的时候它也回进这个SUB我知道一个类都必须实例化
DIM S AS 类S=NEW 类
对不对啊??
而我写的NEW在很大程度上就是为了设计阶段初始化控件
rick大哥,如果说要给控件样式,比如说控件拉到设计视图后看到的效果那些要如何修改,修改成自己图形的控件或者说如何给我们的控件啊,设置图标啊。这些的,好像在SDK里没找到。。不知道哪有参考教程等,谢谢