Setar o foco em um objeto na tela a partir de sua inicialização
Muitas vezes sentimos a necessidade de podermos utilizar foco em nossas aplicações, de forma que a partir da inicialização de uma tela, um objeto esteja focado. Abaixo estarei mostrando uma função que tem por objetivo de montar o foco utilizando vários recursos do ASP.NET.
Public Sub SetInitialFocus(ByVal Control As Control)
Dim s As StringBuilder = New StringBuilder()
Dim p As Control = Control.Parent
Dim f As New System.Web.UI.HtmlControls.HtmlForm()
Dim rbl As New RadioButtonList()
'Procedimento para setar o focu em qualquer objeto asp.net
If Control.Page Is Nothing Then
Throw New ArgumentException("Está faltando informar o controle que deve receber o focus")
End If
If Control.Page.Request.Browser.JavaScript = True Then
' Criar JavaScript
s.Append("<SCRIPT LANGUAGE='JavaScript'>" & Chr(13))
s.Append("<!--" & Chr(13))
s.Append("function SetInitialFocus()" & Chr(13))
s.Append("{" & Chr(13))
s.Append(" document.")
'Encontrar o nome do Form
While Not p.GetType() Is f.GetType()
p = p.Parent
End While
s.Append(p.ClientID)
s.Append("['")
s.Append(Control.UniqueID)
'Setar o foco no selected item de um RadioButtonList
If Control.GetType() Is rbl.GetType() Then
Dim suffix As String = "_0"
Dim t As Integer = 0
Dim li As New ListItem()
For Each li In rbl.Items
If li.Selected = True Then
suffix = "_" + t.ToString()
End If
t = t + 1
Next
s.Append(suffix)
End If
'Setar o foco no primeiro item de um CheckBoxList
Dim ck As New CheckBoxList()
If Control.GetType() Is ck.GetType() Then
s.Append("_0")
End If
s.Append("'].focus();" & Chr(13))
s.Append("}" & Chr(13))
If (Control.Page.SmartNavigation) Then
s.Append("window.setTimeout(SetInitialFocus, 500);" & Chr(13))
Else
s.Append("window.onload = SetInitialFocus;" & Chr(13))
End If
s.Append("// -->" & Chr(13))
s.Append("</SCRIPT>")
' Registrar o Client Script
If Control.Page.IsClientScriptBlockRegistered("InitialFocus") Then
Control.Page.RegisterClientScriptBlock("InitialFocus", "")
End If
Control.Page.RegisterClientScriptBlock("InitialFocus", s.ToString())
End If
End Sub