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