VS.NET - ASP.NET - Wait Screen Control
ASP.NET- Wait Screen Control - Converted to vb.net
Synopsis:
A few weeks ago I came across a link to this article at lennybacon.com which was linked off of the official asp.net page. This WaitScreen Control code was something that I had wanted to implement in one of my projects for a while. While Daniel Fisher's control gives a good look at how to create a custom WaitScreen asp.net control the code is written in C#. Since I wanted to try out this code, but all my work needs to be done in vb.net I had to convert it. Daniel kindly allowed me to put up my attempt at converting his code for anyone else who needs it. Some features in the conversion only work for vs 2005. I have included downloads to my code for both VS 2003 and vs 2005. Additionally I set the default namespace of the vb project rather than explicitly code the namespace. I did this because of issues I was having with the toolbox bitmap functionality, i.e, it was he only way I could ge the bitmapicon to work for the control.
Note: In the aspx file you must set the OnProcess property of control to an event such as the WaitScreen_Process as described in the article at lennybacon.com
Solution:
Download :For VS 2005: WaitScreen.vb
VS 2003 Dll and Code
VS 2005 Dll and Code
Imports System.ComponentModel Imports System.Web.UI Imports System.Drawing Imports System.Web.UI.WebControls '''<summary> '''The WaitScreen control displays a grafic while a long running operation '''is running. '''</summary> <Designer("StaticDust.Web.UI.Controls.WaitScreenDesigner")> _ <ToolboxBitmap(GetType(WaitScreen), "WaitScreen.ico")> _ Public Class WaitScreen : Inherits WebControl ' This field holds the URL pointing to an image Private m_ImageUrl As String = "images/busy.gif" ' these comments won't do anything for vb 2003... sorry. ''' <summary> Gets/sets the URL pointing to an image.</summary> ''' <value>A <see cref="string">string</see> containing the URL pointing ''' to an image..</value> ''' <remarks>This property gets/sets the URL pointing to an image. ''' </remarks> <Description("Gets/sets the URL pointing to an image.")> _ Public Property ImageUrl() As String Get Return m_ImageUrl End Get Set(ByVal Value As String) m_ImageUrl = Value End Set End Property Public Delegate Sub ProcessHandler(ByVal sender As Object, ByVal e As EventArgs) ' more comments vb.net 2003 can't use ''' <summary> ''' The process event. ''' </summary> Public Event Process As ProcessHandler ''' <summary> ''' Triggers the Process event. ''' </summary> Public Overridable Sub OnProcess() RaiseEvent Process(Me, Nothing) End Sub ''' <summary> ''' Triggers the Load event. ''' </summary> Protected Overrides Sub OnLoad(ByVal e As EventArgs) Dim nl = Environment.NewLine MyBase.OnLoad(e) Page.Response.Buffer = True Page.Response.Write(String.Concat( _ "<script type=""text/javascript""> " + nl + nl + _ "//<![CDATA[" + nl + nl + _ "<!--" + nl + nl + " " + nl + nl + _ "if(document.getElementById) " + nl + nl + _ "{ // IE 5 and up, NS 6 and up" + nl + nl + _ " var upLevel = true;" + nl + nl + "}" + nl + nl + _ "else if(document.layers) " + nl + nl + _ "{ // Netscape 4" + nl + nl + _ " var ns4 = true;" + nl + nl + "}" + nl + nl + _ "else if(document.all) " + nl + nl + _ "{ // IE 4" + nl + nl + _ " var ie4 = true;" + nl + nl + _ "}" + nl + nl + " " + nl + nl + _ "function showObject(obj) " + nl + nl + _ "{" + nl + nl + _ " if (ns4) " + nl + nl + _ " {" + nl + nl + _ " obj.visibility = 'show';" + nl + nl + _ " }" + nl + nl + _ " else if (ie4 || upLevel) " + nl + nl + _ " {" + nl + nl + _ " obj.style.visibility = 'visible';" + nl + nl + _ " }" + nl + nl + _ "}" + nl + nl + nl + nl + _ "function hideObject(obj) " + nl + nl + _ "{" + nl + nl + _ " if (ns4) " + nl + nl + _ " {" + nl + nl + _ " obj.visibility = 'hide';" + nl + nl + _ " }" + nl + nl + _ " if (ie4 || upLevel) " + nl + nl + _ " {" + nl + nl + _ " obj.style.visibility = 'hidden';" + nl + nl + _ " }" + nl + nl + _ "}" + nl + nl + _ "// -->" + nl + nl + _ "//]]>" + nl + nl + _ "</script>" + nl + nl + _ "<div id=""splashScreen""><img src=""" & _ New Control().ResolveUrl(m_ImageUrl) & _ """ alt=""busy"" /></div>")) Page.Response.Flush() OnProcess() Page.Response.Flush() Page.Response.Write( _ "<script type=""text/javascript""> " + nl + nl + _ "//<![CDATA[" + nl + nl + _ "<!--" + nl + _ "var splash" + nl + nl + _ "if(upLevel) " + nl + nl + _ "{" + nl + nl + _ " splash = document.getElementById('splashScreen');" + nl + nl + _ "}" + nl + nl + _ "else if(ns4) " + nl + nl + _ "{" + nl + nl + _ " splash = document.splashScreen;" + nl + nl + _ "}" + nl + nl + _ "else if(ie4) " + nl + nl + _ "{" + nl + nl + _ " splash = document.all.splashScreen;" + nl + nl + _ "}" + nl + nl + _ "hideObject(splash);" + nl + nl + _ "// -->" + nl + nl + _ "//]]>" + nl + nl + _ "</script>" + nl + nl) End Sub 'OnLoad End ClassWaitScreenDesigner.vb
Imports System.Web.UI.Design Public Class WaitScreenDesigner : Inherits ControlDesigner Public Overrides Function GetDesignTimeHtml() As String Dim imageUrl As String = DirectCast(Me.Component, WaitScreen).ImageUrl Dim webApp As IWebApplication = _ DirectCast(Component.Site.GetService(GetType(IWebApplication)), IWebApplication) Dim item As IProjectItem = webApp.GetProjectItemFromUrl("~/" & imageUrl) Return String.Concat("<img src=""", item.PhysicalPath & "\""alt='Please wait...' />") End Function End Class