¿Cómo dejar el foco de la página en el ultimo panel?

Buenas experto
Mi pregunta es como poder dejar el foco en el ultimo panel visible
que la página realizada contiene varios panales que van poniendo visible durante el ciclo
pero en un momento hay algunos paneles que cuando se despliegan quedan más abajo de donde esta el foco de la página y tiende a confundir al cliente pues no todos se fijan que se abrió en la parte de abajo de la página
ojala se entienda mi pregunta

1 respuesta

Respuesta
1
Pues la verdad un poco te entendi, lo que dices es que tienes una pagina aspx por supuesto, y es decir por ejemplo se van activando los nuevos paneles y se te pierde el foco se te queda en lo anterior y para acceder a la nueva informacion el usuario tiene que bajar el scroll o algo asi, pues bueno hay varias maneras, si manejas el visual 2008 mira la opcions .Focus(); para poner el foco en el control que quieras si es 2005 o menor no tiene esa opcion que mal pero hay una forma de arreglarlo manteniendo el scroll con el foco del control, o la tercera quitando visibilidad del lso paneles anteriores que no se si te sea conveniente, te pongo como harias lo segundo si tienes visual 2005 o menor ya que ese no deja usar el nombrecontrol.focus();
Ojo veras que es una vaina que hice hace años puede ser que el RegisterClientScriptBlock este obsoleto igual te sirve, pero te recomiendo que utilices lo que te recomienda ahí le pasas el mouse por encima del RegisterClientScriptBlock y ahí te dice que debes utilizar no he actualizado porque como te digo yo utilizo visual 2008 ahora y eso ya tiene el focus que ayuda un montón, por cierto la forma de utilizar es en el Page_Load de la siguiente manera
TestSmartNavigation.SmartNavigation.ScrollToFoco(This.Page);
Ahh cierto ese código debes ponerlo en una nueva clase que se llame SmartNavigation
y listo hermano espero te sirva, igual si tienes algún inconveniente me avisas
Saludos
using System;
using System.Text;
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls;
namespace TestSmartNavigation
{
 /// <summary>
 /// Summary description for SmartNavigation.
 /// </summary>
 public class SmartNavigation
 {
  public static void ScrollToFoco(System.Web.UI.Page page)
  {   
   try
   {
    string[] pbCtrl = page.Request.Form.GetValues("__EVENTTARGET");   
    string ctrlId;
    ctrlId = pbCtrl[0];
    System.Web.UI.Control ctrlFound = page.FindControl(ctrlId);
    if (ctrlFound != null)
    {
     string ctrlClientId;
     ctrlClientId = ctrlFound.ClientID;
     string strScript;
     strScript = "<SCRIPT language=\"javascript\"> function RestoreScrollPositionyFocus() {"  
      +"document.getElementById('"+ctrlClientId+"').focus();"
      +"document.getElementById('"+ctrlClientId+"').scrollIntoView(true);}"
      +"window.onload = RestoreScrollPositionyFocus;</SCRIPT>";
                    page.ClientScript.RegisterClientScriptBlock(System.Type.GetType("System.String"), "controlFocus", strScript);
    }
   }
   catch(Exception){}
  }  
 }
}
Disculpa, pero si uso 2005
Me gustaría que me pudieras explicar un poco más ese código pues aunque cree el cs y agregue al page load la llamada no paso nada
Bueno básicamente es un script que lo registras en cada página y lo que hace te mantiene el foco en el ultimo control que realiza el postback en la página, si no quieres hacerlo de esa manera puedes pegarlo como script en cada página que quieras que simule ese evento de manter scroll y foco, lo que hace es por decir el control se encuentra más abajo y tienes que bajar manual mente el scroll esto te lo adjusta automáticamente
Pues puede que te salga un error al querer ejecutarlo por el namespace, fíjate que name espace tiene tu clase y en vez de utilizar ne le page load con el name espace TestSmartNavigation utilizas el que tienes y mejor copia solo lo que esta dentro de la clase SmartNavigation, pruébale de esa forma y me comentas
Saludos
using System;
using System.Text;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
namespace TestSmartNavigation
{
 /// <summary>
 /// Summary description for SmartNavigation.
 /// </summary>
 public class SmartNavigation
 {
  public static void ScrollToFoco(System.Web.UI.Page page)
  {  
   try
   {
    string[] pbCtrl = page.Request.Form.GetValues("__EVENTTARGET");  
    string ctrlId;
    ctrlId = pbCtrl[0];
    System.Web.UI.Control ctrlFound = page.FindControl(ctrlId);
    if (ctrlFound != null)
    {
     string ctrlClientId;
     ctrlClientId = ctrlFound.ClientID;
     string strScript;
     strScript = "<SCRIPT language=\"javascript\"> function RestoreScrollPositionyFocus() {" 
      +"document.getElementById('"+ctrlClientId+"').focus();"
      +"document.getElementById('"+ctrlClientId+"').scrollIntoView(true);}"
      +"window.onload = RestoreScrollPositionyFocus;</SCRIPT>";
                    page.ClientScript.RegisterClientScriptBlock(System.Type.GetType("System.String"), "controlFocus", strScript);
    }
   }
   catch(Exception){}
  } 
 }
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas