 I tend to agree but we recently had a situation where the customer wanted the tooltip to show for a longer period of time. When that is the requirement you must come up with something other than title='blah'.
For anyone who has a similar requirement I recommend Walter Zorn's tooltip library (www.walterzorn.com). Here is a server side class I created based on his library. You don't get design time support but it fully supports his library as of about a year ago.
Imports System.Collections.Generic
''' <summary>
''' Provides programmatic access to the wz_tooltip.js library. See http:
''' Call Page.ClientScript.RegisterStartupScript(GetType(String), "ScriptKeyName", WZToolTip.GetClientScriptIncludes(True, WZToolTip.BalloonColor.LightBlue), False)
''' in Page_Load and the js and image references will be handled for you.
''' </summary>
''' <remarks></remarks>
Public Class WZToolTip
#Region " Fields and Enums "
Private _tipText As String = ""
Private _above As Boolean = False
Private _bgColor As String = "#E4E7FF"
Private _bgImage As String = ""
Private _borderColor As String = "#002299"
Private _borderStyle As String = "solid"
Private _borderWidth As Integer = 1
Private _centerMouse As Boolean = False
Private _clickClose As Boolean = False
Private _closeButton As Boolean = False
Private _closeButtonText As String = " X "
Private _closeButtonColors As CloseButtonColors
Private _copyContent As CopyContent
Private _delay As Integer = 400
Private _duration As Integer = 0
Private _fadeIn As Integer = 0
Private _fadeOut As Integer = 0
Private _fix As FixedCoordinate
Private _followMouse As Boolean = True
Private _fontColor As String = "#000044"
Private _fontFamily As String = "Verdana,Geneva,sans-serif"
Private _fontSize As String = "8pt"
Private _fontWeight As FontWeight
Private _left As Boolean = False
Private _offsetX As Integer = 14
Private _offsetY As Integer = 8
Private _opacity As Integer = 100
Private _padding As Integer = 3
Private _shadow As Boolean = False
Private _shadowColor As String = "#C0C0C0"
Private _shadowWidth As Integer = 5
Private _sticky As Boolean = False
Private _textAlign As Align
Private _title As String = ""
Private _titleAlign As Align
Private _titleBGColor As String = ""
Private _titleFontColor As String = "#ffffff"
Private _titleFontFamily As String = ""
Private _titleFontSize As String = ""
Private _width As Integer = 0
Private _tip As StringBuilder
Private _properties As ArrayList
Private _listItemProps As ListItemCollection
Private _balloon As Boolean = False
Private _followScroll As Boolean = False
Private _centerWindow As Boolean = False
Private _centerAlways As Boolean = False
Enum BalloonColor
Blue = 0
LightBlue = 1
Manilla = 2
End Enum
#End Region
#Region " Properties "
''' <summary>
''' Keeps the tooltip at its position in the window's clientarea even if the window is scrolled. Applying true to this property
''' automatically sets the Sticky property to true because it is required. A reference on the page to tip_followscroll.js is required.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property FollowScroll() As Boolean
Get
Return _followScroll
End Get
Set(ByVal value As Boolean)
_followScroll = value
Sticky = value
SetListItemProperty("FOLLOWSCROLL, ", _followScroll.ToString().ToLower())
End Set
End Property
''' <summary>
''' Centers the tooltip inside the window's clientarea. Applying true to this property automatically sets the Sticky
''' property to True as it is required. A reference on the page to tip_centerwindow.js is required.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property CenterWindow() As Boolean
Get
Return _centerWindow
End Get
Set(ByVal value As Boolean)
_centerWindow = value
Sticky = value
SetListItemProperty("CENTERWINDOW, ", _centerWindow.ToString().ToLower())
End Set
End Property
''' <summary>
''' Keeps the tooltip centered in the window's clientarea even if the window is scrolled or resized. Only has an effect if used with
''' CENTERWINDOW = True.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property CenterAlways() As Boolean
Get
Return _centerAlways
End Get
Set(ByVal value As Boolean)
_centerAlways = value
SetListItemProperty("CENTERALWAYS, ", _centerAlways.ToString().ToLower())
End Set
End Property
''' <summary>
''' If True, shows the tooltip as a balloon or callout shape. A reference on the page to tip_balloon_(color).js is required.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Balloon() As Boolean
Get
Return _balloon
End Get
Set(ByVal value As Boolean)
_balloon = value
SetListItemProperty("BALLOON, ", _balloon.ToString().ToLower())
End Set
End Property
''' <summary>
''' Sets the tooltip text
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property TipText() As String
Get
Return _tipText
End Get
Set(ByVal value As String)
_tipText = value.Replace("'", "\'")
_tipText = _tipText.Replace(Chr(&HD) & Chr(&HA), "<br/>")
_tipText = _tipText.Replace(vbCrLf, "<br/>")
If Not _tipText.Contains("<br/>") And _tipText.Length > 66 Then
_tipText = clsUtil.WrapTextAt(_tipText, "<br/>", 66)
End If
End Set
End Property
''' <summary>
''' Determines if the tooltip should be shown above the mouse cursor
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Above() As Boolean
Get
Return _above
End Get
Set(ByVal value As Boolean)
_above = value
SetListItemProperty("ABOVE, ", _above.ToString().ToLower())
End Set
End Property
''' <summary>
''' Sets the background color of the tooltip. Default value is: "#E4E7FF"
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property BGColor() As String
Get
Return _bgColor
End Get
Set(ByVal value As String)
_bgColor = value.Replace("'", "")
SetListItemProperty("BGCOLOR, ", "'" & _bgColor & "'")
End Set
End Property
''' <summary>
''' Sets the url for the Background Image on the WZToolTip. Default value is: ""
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property BGImage() As String
Get
Return _bgImage
End Get
Set(ByVal value As String)
_bgImage = value.Replace("'", "")
SetListItemProperty("BGIMG, ", "'" & _bgImage & "'")
End Set
End Property
''' <summary>
''' Sets the Border Color for the WZToolTip. Default value is: "#002299"
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property BorderColor() As String
Get
Return _borderColor
End Get
Set(ByVal value As String)
_borderColor = value.Replace("'", "")
SetListItemProperty("BORDERCOLOR, ", "'" & _borderColor & "'")
End Set
End Property
''' <summary>
''' Sets the Border Style for the WZToolTip. Default value is: "solid"
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property BorderStyle() As String
Get
Return _borderStyle
End Get
Set(ByVal value As String)
_borderStyle = value.Replace("'", "")
SetListItemProperty("BORDERSTYLE, ", "'" & value.ToLower() & "'")
End Set
End Property
''' <summary>
''' Sets the Border Width for the WZToolTip. Default value is: 1
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property BorderWidth() As Integer
Get
Return _borderWidth
End Get
Set(ByVal value As Integer)
_borderWidth = value
SetListItemProperty("BORDERWIDTH, ", _borderWidth.ToString())
End Set
End Property
''' <summary>
''' If True, centers the tooltip on the mouse pointer. Default value is: False
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property CenterMouse() As Boolean
Get
Return _centerMouse
End Get
Set(ByVal value As Boolean)
_centerMouse = value
SetListItemProperty("CENTERMOUSE, ", _centerMouse.ToString().ToLower())
End Set
End Property
''' <summary>
''' Closes the tooltip once the user clicks somewhere inside the tooltip or into the document. Default value is: False.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property ClickClose() As Boolean
Get
Return _clickClose
End Get
Set(ByVal value As Boolean)
_clickClose = value
SetListItemProperty("CLICKCLOSE, ", _clickClose.ToString().ToLower())
End Set
End Property
''' <summary>
''' Displays a closebutton in the titlebar. Default value is: False. Setting this property to True also sets the Sticky property to true
''' as it is required.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property CloseButton() As Boolean
Get
Return _closeButton
End Get
Set(ByVal value As Boolean)
_closeButton = value
Sticky = value
SetListItemProperty("CLOSEBTN, ", _closeButton.ToString().ToLower())
End Set
End Property
''' <summary>
''' Sets an array of colors for the Close Button. See the CloseButtonColors class for more information.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property CloseButtonColors() As CloseButtonColors
Get
Return _closeButtonColors
End Get
Set(ByVal value As CloseButtonColors)
_closeButtonColors = value
SetTypeNameProperty(_closeButtonColors)
End Set
End Property
''' <summary>
''' Sets the close button text. Default value is 'X'. You can also set this value to an image tag.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property CloseButtonText() As String
Get
Return _closeButtonText
End Get
Set(ByVal value As String)
_closeButtonText = value.Replace("'", "\'")
SetListItemProperty("CLOSEBTNTEXT, ", "'" & _closeButtonText & "'")
End Set
End Property
''' <summary>
''' Sets a control ID and a boolean to determine if the entire tag should be made into a tooltip or just the InnerHTML (Default is: True).
''' See http:
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property CopyContent() As CopyContent
Get
Return _copyContent
End Get
Set(ByVal value As CopyContent)
_copyContent = value
SetTypeNameProperty(_copyContent)
End Set
End Property
''' <summary>
''' Tooltip shows up after the specified timeout, in milliseconds. A behavior similar to OS based tooltips Default is: 400
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Delay() As Integer
Get
Return _delay
End Get
Set(ByVal value As Integer)
_delay = value
SetListItemProperty("DELAY, ", _delay.ToString())
End Set
End Property
''' <summary>
''' Time span, in milliseconds, until the tooltip will be hidden, even if the STICKY command has been applied,
''' or even if the mouse is still on the HTML element that has triggered the tooltip. Default value is: 0
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Duration() As Integer
Get
Return _duration
End Get
Set(ByVal value As Integer)
_duration = value
SetListItemProperty("DURATION, ", _duration.ToString())
End Set
End Property
''' <summary>
''' Fade-in animation. The value specifies the duration of the animation, in milliseconds. 0 for no animation. Default value is: 0
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property FadeIn() As Integer
Get
Return _fadeIn
End Get
Set(ByVal value As Integer)
_fadeIn = value
SetListItemProperty("FADEIN, ", _fadeIn.ToString())
End Set
End Property
''' <summary>
''' Fade-out animation. The value specifies the duration of the animation, in milliseconds. 0 for no animation. Default value is: 0
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property FadeOut() As Integer
Get
Return _fadeOut
End Get
Set(ByVal value As Integer)
_fadeOut = value
SetListItemProperty("FADEOUT, ", _fadeOut.ToString())
End Set
End Property
''' <summary>
''' Shows the tooltip at the fixed coordinates [x, y]. You can also call function(s) defined elsewhere that calculate the coordinates dynamically:
''' Example: onmouseover="Tip('Text', FIX, [CalcFixX(), CalcFixY()], BORDERWIDTH, 2)"
''' OR
''' onmouseover="Tip('Text', FIX, CalcFixXY(), ABOVE, true)"
''' In the latter example, the function CalcFixXY() must return an array containing the two numbers.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property FixedCoordinates() As FixedCoordinate
Get
Return _fix
End Get
Set(ByVal value As FixedCoordinate)
_fix = value
SetTypeNameProperty(_fix)
End Set
End Property
''' <summary>
''' The tooltip follows the movements of the mouse. Default: True
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property FollowMouse() As Boolean
Get
Return _followMouse
End Get
Set(ByVal value As Boolean)
_followMouse = value
SetListItemProperty("FOLLOWMOUSE, ", _followMouse.ToString().ToLower())
End Set
End Property
''' <summary>
''' Font color. Value: HTML color. Default is: "#000044"
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property FontColor() As String
Get
Return _fontColor
End Get
Set(ByVal value As String)
_fontColor = value.Replace("'", "")
SetListItemProperty("FONTCOLOR, ", "'" & _fontColor & "'")
End Set
End Property
''' <summary>
''' Font Family as you'd specify it in HTML or CSS. Default value: "Verdana,Geneva,sans-serif"
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property FontFamily() As String
Get
Return _fontFamily
End Get
Set(ByVal value As String)
_fontFamily = value.Replace("'", "")
SetListItemProperty("FONTFACE, ", "'" & _fontFamily & "'")
End Set
End Property
''' <summary>
''' Size with unit. Unit ('px', 'pt', 'em' etc.) is mandatory. Default is: "8pt"
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property FontSize() As String
Get
Return _fontSize
End Get
Set(ByVal value As String)
_fontSize = value.Replace("'", "")
SetListItemProperty("FONTSIZE, ", "'" & _fontSize & "'")
End Set
End Property
''' <summary>
''' Normal or Bold. Default is "normal"
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property FontWeight() As FontWeight
Get
Return _fontWeight
End Get
Set(ByVal value As FontWeight)
_fontWeight = value
SetTypeNameProperty(_fontWeight)
End Set
End Property
''' <summary>
''' Tooltip positioned on the left side of the mousepointer. Default is: False.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Left() As Boolean
Get
Return _left
End Get
Set(ByVal value As Boolean)
_left = value
SetListItemProperty("LEFT, ", _left.ToString().ToLower())
End Set
End Property
''' <summary>
''' Horizontal offset from mouse-pointer. Value: Any integer. May also be negative. Default is 14
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property OffsetX() As Integer
Get
Return _offsetX
End Get
Set(ByVal value As Integer)
_offsetX = value
SetListItemProperty("OFFSETX, ", _offsetX.ToString())
End Set
End Property
''' <summary>
''' Vertical offset from the mouse-pointer. Value: Any integer. May also be negative. Default is: 8
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property OffsetY() As Integer
Get
Return _offsetY
End Get
Set(ByVal value As Integer)
_offsetY = value
SetListItemProperty("OFFSETY, ", _offsetY.ToString())
End Set
End Property
''' <summary>
''' Opacity is the opposite of transparency. i.e. opacity = 100 - transparency (in percent). Default is: 100
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Opacity() As Integer
Get
If _opacity > 100 Then
Return 100
Else
Return _opacity
End If
End Get
Set(ByVal value As Integer)
If Not value < 0 Then
_opacity = value
Else
_opacity = 0
End If
SetListItemProperty("OPACITY, ", _opacity.ToString())
End Set
End Property
''' <summary>
''' Inner spacing of tooltip, between border and content. Default is: 3
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Padding() As Integer
Get
Return _padding
End Get
Set(ByVal value As Integer)
_padding = value
SetListItemProperty("PADDING, ", _padding.ToString())
End Set
End Property
''' <summary>
''' Tooltip drops a shadow. Default is: False. If combined with Opacity that is less than 100 the Shadow does not show.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Shadow() As Boolean
Get
Return _shadow
End Get
Set(ByVal value As Boolean)
_shadow = value
SetListItemProperty("SHADOW, ", _shadow.ToString().ToLower())
End Set
End Property
''' <summary>
''' Shadow color. Value: HTML color. Default is: "#C0C0C0"
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property ShadowColor() As String
Get
If String.IsNullOrEmpty(_shadowColor) Then
Return "#C0C0C0"
End If
Return _shadowColor
End Get
Set(ByVal value As String)
_shadowColor = value.Replace("'", "")
SetListItemProperty("SHADOWCOLOR, ", "'" & _shadowColor & "'")
End Set
End Property
''' <summary>
''' Shadow width (offset). Default is: 5
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property ShadowWidth() As Integer
Get
If _shadowWidth = 0 Then
Return 5
End If
Return _shadowWidth
End Get
Set(ByVal value As Integer)
_shadowWidth = value
SetListItemProperty("SHADOWWIDTH, ", _shadowWidth.ToString())
End Set
End Property
''' <summary>
''' The tooltip stays fixed at its initial position until another tooltip pops up. Default is: False.
''' When combined with Duration you can force the tooltip to disappear after a certain time span.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Sticky() As Boolean
Get
Return _sticky
End Get
Set(ByVal value As Boolean)
_sticky = value
SetListItemProperty("STICKY, ", _sticky.ToString().ToLower())
End Set
End Property
''' <summary>
''' Aligns the text in the body of the tooltip. Value: "right", "center", "justify" or "left". Default is: "left".
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property TextAlign() As Align
Get
Return _textAlign
End Get
Set(ByVal value As Align)
_textAlign = value
SetTypeNameProperty(_textAlign)
End Set
End Property
''' <summary>
''' Display a titlebar. Value: Text to display. May even contain HTML, which gives you additional freedom in fashioning the titlebar
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Title() As String
Get
Return _title
End Get
Set(ByVal value As String)
_title = value.Replace("'", "\'")
SetListItemProperty("TITLE, ", "'" & _title & "'")
End Set
End Property
''' <summary>
''' Aligns the text in the titlebar. Value: 'right', 'center', 'justify' or 'left'. Default is 'left'.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property TitleAlign() As Align
Get
Return _titleAlign
End Get
Set(ByVal value As Align)
_titleAlign = value
SetTypeNameProperty(_titleAlign)
End Set
End Property
''' <summary>
''' Backgroundcolor of the titlebar. Value: HTML color, in single quotes. If it's an empty string '',
''' the border color (see also BORDERCOLOR command) is used (this is the default).
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property TitleBackgroundColor() As String
Get
Return _titleBGColor
End Get
Set(ByVal value As String)
_titleBGColor = value.Replace("'", "")
SetListItemProperty("TITLEBGCOLOR, ", "'" & _titleBGColor & "'")
End Set
End Property
''' <summary>
''' Color of title text. Value: HTML color, in single quotes. If it's an empty string '',
''' the backgroundcolor of the tooltip body (see also BGCOLOR command) is used (this is the default).
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property TitleFontColor() As String
Get
Return _titleFontColor
End Get
Set(ByVal value As String)
_titleFontColor = value.Replace("'", "")
SetListItemProperty("TITLEFONTCOLOR, ", "'" & _titleFontColor & "'")
End Set
End Property
''' <summary>
''' Font Family for title text. Value: Like in HTML or CSS. If the value is an empty string '',
''' the tooltip body font, in boldified form, is used (this is the default).
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property TitleFontFamily() As String
Get
If String.IsNullOrEmpty(_titleFontFamily) Then
Return _fontFamily
End If
Return _titleFontFamily
End Get
Set(ByVal value As String)
_titleFontFamily = value.Replace("'", "")
SetListItemProperty("TITLEFONTFACE, ", "'" & _titleFontFamily & "'")
End Set
End Property
''' <summary>
''' Font size of title text. Value: Size with unit, in single quotes. Unit ('px', 'pt', 'em' etc.) is mandatory.
''' If the value is an empty string '', the fontsize of the tooltip body is applied.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property TitleFontSize() As String
Get
If String.IsNullOrEmpty(_titleFontSize) Then
Return _fontSize
End If
Return _titleFontSize
End Get
Set(ByVal value As String)
_titleFontSize = value.Replace("'", "")
SetListItemProperty("TITLEFONTSIZE, ", "'" & _titleFontSize & "'")
End Set
End Property
''' <summary>
''' Width of tooltip. If 0 (the default), the width is automatically adapted to the content of the tooltip.
''' NOTE: The tooltips follow the W3C box model, which means that the specified width applies to the actual
''' content of the tooltip, excluding padding (see PADDING command), border and shadow.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Width() As Integer
Get
Return _width
End Get
Set(ByVal value As Integer)
_width = value
SetListItemProperty("WIDTH, ", _width.ToString())
End Set
End Property
''' <summary>
''' Gets or sets the string of the tooltip.
''' </summary>
Public Property Tip() As String
Get
Return GetTip()
End Get
Set(ByVal value As String)
_tip.Length = 0
_tip.Append(value)
End Set
End Property
#End Region
#Region " Methods "
''' <summary>
''' CTOR for WZToolTip.
''' </summary>
''' <param name="ttipText"></param>
''' <remarks></remarks>
Public Sub New(Optional ByVal ttipText As String = " ")
TipText = ttipText
_tip = New StringBuilder()
_properties = New ArrayList()
_copyContent = New CopyContent
_fix = New FixedCoordinate
_closeButtonColors = New CloseButtonColors
_textAlign = New Align(Align.eAlignType.TextAlign, Align.AlignValue.Left)
_titleAlign = New Align(Align.eAlignType.TitleAlign, Align.AlignValue.Left)
_listItemProps = New ListItemCollection()
End Sub
''' <summary>
''' Adds changed properties to an internal collection for tracking and rendering.
''' </summary>
''' <param name="propertyName"></param>
''' <param name="propertyValue"></param>
''' <remarks></remarks>
Private Sub SetListItemProperty(ByVal propertyName As String, ByVal propertyValue As String)
Dim item As ListItem = _listItemProps.FindByText(propertyName)
If item Is Nothing Then
item = New ListItem(propertyName, propertyValue)
_listItemProps.Add(item)
Else
item.Value = propertyValue
End If
If Not item Is Nothing Then
If Not _properties.Contains(item) Then
_properties.Add(item)
Else
For Each obj As Object In _properties
If TypeOf (obj) Is ListItem Then
Dim pItem As ListItem = DirectCast(obj, ListItem)
If Not pItem Is Nothing Then
If pItem.Text = propertyName Then
pItem.Value = item.Value
Exit For
End If
End If
End If
Next
End If
End If
End Sub
Private Sub SetTypeNameProperty(ByVal classType As Object)
Dim found As Boolean = False
Dim name As String = classType.GetType().Name
For Each obj As Object In _properties
If obj.GetType().Name = name Then
If Not name = "Align" Then
obj = classType
found = True
Else
Dim al As Align = obj
Dim al2 As Align = DirectCast(classType, Align)
If al.AlignType = al2.AlignType Then
obj = classType
found = True
End If
End If
End If
Next
If Not found Then
_properties.Add(classType)
End If
End Sub
''' <summary>
''' Produces the text needed to show a tooltip.
''' Example:
''' Dim wz as New WZToolTip("Some Text")
''' Dim anch as New HtmlAnchor()
''' anch.Attributes("mouseover") = wz.GetTip()
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetTip() As String
Dim objectName As String = ""
Dim paramItem As ListItem
Dim algn As Align
Dim fixedCoord As FixedCoordinate
Dim fntWeight As FontWeight
Dim cBtnColors As CloseButtonColors
_tip.Length = 0
If Not CopyContent.ControlID.Length = 0 Then ' See comments on the CopyContent class for example usage.
_tip.Append("TagToTip('" & CopyContent.ControlID & "'")
Else
_tip.Append("Tip('" & TipText & "'")
End If
For Each obj As Object In _properties
Try
objectName = obj.GetType().Name
_tip.Append(", ")
Select Case objectName
Case "ListItem"
paramItem = DirectCast(obj, ListItem)
_tip.Append(paramItem.Text & paramItem.Value)
Case "Align"
algn = DirectCast(obj, Align)
_tip.Append(algn.GetValue())
Case "FixedCoordinate"
fixedCoord = DirectCast(obj, FixedCoordinate)
_tip.Append(fixedCoord.GetValue())
Case "FontWeight"
fntWeight = DirectCast(obj, FontWeight)
_tip.Append(fntWeight.GetValue())
Case "CloseButtonColors"
cBtnColors = DirectCast(obj, CloseButtonColors)
_tip.Append(cBtnColors.GetValue())
Case "CopyContent"
_tip.Append("COPYCONTENT, " & CopyContent.CopyInnerHTML.ToString.ToLower)
End Select
Catch ex As Exception
End Try
Next
Dim tipString As String = _tip.ToString().Trim()
tipString = tipString.TrimEnd(Convert.ToChar(","))
tipString += ");"
_tip.Length = 0
_tip.Append(tipString)
Return _tip.ToString()
End Function
''' <summary>
''' Gets an HTML anchor with the text you specify and sets it's mouseover event equal to the value returned by GetTip(). Clicking the link
''' this anchor creates does nothing.
''' </summary>
''' <param name="displayText"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetAnchorTip(ByVal displayText As String, Optional ByVal styleString As String = "text-decoration: none; border: 0;") As String
Dim lnk As String = "<a href='javascript:void(0);' style='" & styleString & "' onmouseover=""" & GetTip() & """>" & displayText & "</a>"
Return lnk
End Function
Public Function GetImageTip(ByVal imageSrc As String, Optional ByVal styleString As String = "text-decoration: none; border: 0;") As String
Dim lnk As String = "<img src='" & imageSrc & "' style='" & styleString & "' onmouseover=""" & GetTip() & """ alt=''/>"
Return lnk
End Function
''' <summary>
''' Attaches the tooltip to the mouseover event of an System.Web.UI.WebControls.WebControl or HtmlControl
''' </summary>
''' <param name="control"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function AttachMouseOver(ByVal control As Object) As Object
Dim webControl As System.Web.UI.WebControls.WebControl
Dim htmlControl As System.Web.UI.HtmlControls.HtmlControl
Dim htmlGenControl As System.Web.UI.HtmlControls.HtmlGenericControl
Try
If TypeOf (control) Is WebControl Then
webControl = DirectCast(control, WebControl)
If Not webControl Is Nothing Then
webControl.Attributes("onmouseover") = GetTip()
End If
Return webControl
Else
If TypeOf (control) Is HtmlControl Then
htmlControl = DirectCast(control, HtmlControl)
If Not htmlControl Is Nothing Then
htmlControl.Attributes("onmouseover") = GetTip()
End If
Return htmlControl
ElseIf TypeOf (control) Is HtmlGenericControl Then
htmlGenControl = DirectCast(control, HtmlGenericControl)
If Not htmlGenControl Is Nothing Then
htmlGenControl.Attributes("onmouseover") = GetTip()
End If
Return htmlGenControl
End If
End If
Catch ex As Exception
Return Nothing
End Try
Return Nothing
End Function
''' <summary>
''' Returns a startup script for the baloon image path. The script tags are included.
''' </summary>
''' <param name="color"></param>
''' <remarks></remarks>
Public Shared Function GetBalloonImagePathStartUpScript(ByVal color As BalloonColor, Optional ByVal applicationRoot As String = "") As String
Dim tagStart As String = "<script language='javascript' type='text/javascript'>"
Dim tagEnd As String = "</script>"
Dim mainDirectory As String = "/javascript"
Dim imgDirectory As String = ""
Dim config As String = " config. BalloonImgPath = '"
Dim sb As New StringBuilder()
If applicationRoot.Length = 0 Then
applicationRoot = clsUtil.GetRootUrl
End If
sb.Append(tagStart)
sb.Append(config)
sb.Append(applicationRoot)
sb.Append(mainDirectory)
Select Case color
Case BalloonColor.Blue
imgDirectory = "/tip_balloon_blue';"
Case BalloonColor.LightBlue
imgDirectory = "/tip_balloon_lightblue';"
Case BalloonColor.Manilla
imgDirectory = "/tip_balloon_manilla';"
Case Else
imgDirectory = "/tip_balloon_lightblue';"
End Select
sb.Append(imgDirectory)
sb.Append(" Balloon_PreCacheDefImgs();")
sb.Append(tagEnd)
Return sb.ToString
End Function
''' <summary>
''' Returns the startup script blocks required when using the WZToolTip library. The script tags are included.
''' </summary>
''' <param name="IncludeBalloon"></param>
''' <param name="color"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function GetClientScriptIncludes(ByVal IncludeBalloon As Boolean, Optional ByVal color As BalloonColor = BalloonColor.LightBlue) As String
Dim sb As StringBuilder = New StringBuilder()
Dim appRoot As String = GetRootUrl
Dim mainJs As String = "/javascript/wz_tooltip.js'"
Dim balloonJs As String = ""
Dim tagStart As String = "<script language='javascript' type='text/javascript' src='"
Dim tagEnd As String = "></script>"
sb.Append(tagStart)
sb.Append(appRoot)
sb.Append(mainJs)
sb.Append(tagEnd)
If IncludeBalloon Then
sb.Append(tagStart)
sb.Append(appRoot)
Select Case color
Case BalloonColor.Blue
balloonJs = "/javascript/tip_balloon_blue.js'"
Case BalloonColor.LightBlue
balloonJs = "/javascript/tip_balloon_lightblue.js'"
Case BalloonColor.Manilla
balloonJs = "/javascript/tip_balloon_manilla.js'"
Case Else
balloonJs = "/javascript/tip_balloon_lightblue.js'"
End Select
sb.Append(balloonJs)
sb.Append(tagEnd)
sb.Append(GetBalloonImagePathStartUpScript(color, appRoot))
End If
Return sb.ToString
End Function
''' <summary>
''' Returns the fully qualified Url of the application including the protocol, the server name, the port, and the application path.
''' </summary>
''' <returns>string</returns>
''' <remarks></remarks>
Public Shared Function GetRootUrl() As String
Dim ctrl As New System.Web.UI.Control()
Dim str As String = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) & ctrl.ResolveUrl(HttpContext.Current.Request.ApplicationPath)
ctrl.Dispose()
Return str
End Function
#End Region
End Class
''' <summary>
''' Creates the 'CLOSEBUTTONCOLORS parameter for a WZToolTip. The default values are: 'CLOSEBTNCOLORS, ['#990000', '#FFFFFF', '#DD3333', '#FFFFFF']
''' </summary>
''' <remarks></remarks>
Public Class CloseButtonColors
#Region " Fields "
Private _bkgndColor As String = "#990000"
Private _textColor As String = "#FFFFFF"
Private _hoverColor As String = "#DD3333"
Private _textHoverColor As String = "#FFFFFF"
#End Region
#Region " Properties "
Public Property BackGroundColor() As String
Get
Return _bkgndColor
End Get
Set(ByVal value As String)
_bkgndColor = value.Replace("'", "")
End Set
End Property
Public Property TextColor() As String
Get
Return _textColor
End Get
Set(ByVal value As String)
_textColor = value.Replace("'", "")
End Set
End Property
Public Property HoverColor() As String
Get
Return _hoverColor
End Get
Set(ByVal value As String)
_hoverColor = value.Replace("'", "")
End Set
End Property
Public Property TextHoverColor() As String
Get
Return _textHoverColor
End Get
Set(ByVal value As String)
_textHoverColor = value.Replace("'", "")
End Set
End Property
#End Region
#Region " Methods "
Public Sub New()
End Sub
Public Sub New(ByVal sBackGroundColor As String, ByVal sTextColor As String, ByVal sHoverColor As String, ByVal sTextHoverColor As String)
BackGroundColor = sBackGroundColor
TextColor = sTextColor
HoverColor = sHoverColor
TextHoverColor = sTextHoverColor
End Sub
Public Function GetValue() As String
Return "CLOSEBTNCOLORS, ['" & _bkgndColor & "', '" & _textColor & "', '" & _hoverColor & "', '" & _textHoverColor & "']"
End Function
#End Region
End Class
''' <summary>
''' Copies the content of an html element (or the element itself) to a tooltip.
''' If the ControlID is set to any non zero length string, the WZToolTip will output a TagToTip() function call instead of a Tip() function call.
''' </summary>
''' <remarks></remarks>
Public Class CopyContent
' Example:
'Dim wzTip As New WZToolTip("Provider Maps")
'wzTip.CopyContent = New CopyContent(dvProviderMapsMain.ClientID)
'wzTip.CopyContent.CopyInnerHTML = False ' just append the html node not the innerHTML
'wzTip.Sticky = True
'wzTip.CloseButton = True
'wzTip.Shadow = True
'wzTip.Title = "Providers " & userName & " is mapped to."
'wzTip.Width = 300
'wzTip.OffsetY = -250 'up
'Literal1.Text = wzTip.GetAnchorTip("Provider Maps")
#Region " Fields "
Private _controlID As String = ""
Private _copyInnerHtml As Boolean = True
#End Region
#Region " Properties "
Public Property ControlID() As String
Get
Return _controlID
End Get
Set(ByVal value As String)
_controlID = value
End Set
End Property
Public Property CopyInnerHTML() As Boolean
Get
Return _copyInnerHtml
End Get
Set(ByVal value As Boolean)
_copyInnerHtml = value
End Set
End Property
#End Region
#Region " Methods "
Public Sub New()
End Sub
Public Sub New(ByVal sControlID As String)
ControlID = sControlID
End Sub
#End Region
End Class
''' <summary>
''' Sets the FIX property X and Y values
''' </summary>
''' <remarks></remarks>
Public Class FixedCoordinate
#Region " Fields "
Private _x As Integer
Private _y As Integer
Private _jsFunction As String
#End Region
#Region " Properties "
Public Property X() As Integer
Get
Return _x
End Get
Set(ByVal value As Integer)
_x = value
End Set
End Property
Public Property Y() As Integer
Get
Return _y
End Get
Set(ByVal value As Integer)
_y = value
End Set
End Property
Public Property JavaScriptFunction() As String
Get
Return _jsFunction
End Get
Set(ByVal value As String)
_jsFunction = value
End Set
End Property
#End Region
#Region " Methods "
Public Sub New()
End Sub
Public Sub New(ByVal iX As Integer, ByVal iY As Integer)
X = iX
Y = iY
End Sub
Public Function GetValue() As String
If Not String.IsNullOrEmpty(_jsFunction) Then
Return "FIX, " & _jsFunction
Else
Return "FIX, [" & _x.ToString() & ", " & _y.ToString() & "]"
End If
End Function
#End Region
End Class
''' <summary>
''' Sets the font weight to either normal or bold, the default is normal.
''' </summary>
''' <remarks></remarks>
Public Class FontWeight
#Region " Fields "
Private _fntWeight As FntWeight
Enum FntWeight
Normal = 0
Bold = 1
End Enum
#End Region
#Region " Properties "
Public Property Value() As FntWeight
Get
Return _fntWeight
End Get
Set(ByVal value As FntWeight)
_fntWeight = value
End Set
End Property
#End Region
#Region " Methods "
Public Sub New()
End Sub
Public Sub New(ByVal eFontWeight As FntWeight)
Value = eFontWeight
End Sub
Public Function GetValue() As String
Select Case _fntWeight
Case FntWeight.Bold
Return "FONTWEIGHT, " & "'bold'"
Case Else
Return "FONTWEIGHT, " & "'normal'"
End Select
End Function
#End Region
End Class
''' <summary>
''' Sets the TitleAlign or TextAlign property. Default is "left"
''' </summary>
''' <remarks></remarks>
Public Class Align
#Region " Fields "
Private _alignType As eAlignType
Private _alignValue As AlignValue
Enum eAlignType
TextAlign = 0
TitleAlign = 1
End Enum
Enum AlignValue
Left = 0
Right = 1
Center = 2
Justify = 3
End Enum
#End Region
#Region " Properties "
Public Property AlignType() As eAlignType
Get
Return _alignType
End Get
Set(ByVal value As eAlignType)
_alignType = value
End Set
End Property
Public Property Value() As AlignValue
Get
Return _alignValue
End Get
Set(ByVal value As AlignValue)
_alignValue = value
End Set
End Property
#End Region
#Region " Methods "
Public Sub New()
End Sub
Public Sub New(ByVal enumAlignType As eAlignType, ByVal enumAlignValue As AlignValue)
AlignType = enumAlignType
Value = enumAlignValue
End Sub
Private Function AlignTypeToString() As String
If AlignType = eAlignType.TitleAlign Then
Return "TITLEALIGN"
Else
Return "TEXTALIGN"
End If
End Function
Public Function GetValue() As String
Select Case Value
Case AlignValue.Left
Return AlignTypeToString() & ", 'left'"
Case AlignValue.Right
Return AlignTypeToString() & ", 'right'"
Case AlignValue.Center
Return AlignTypeToString() & ", 'center'"
Case AlignValue.Justify
Return AlignTypeToString() & ", 'justify'"
Case Else
Return AlignTypeToString() & ", 'left'"
End Select
End Function
#End Region
End Class
|