Définir le Focus au Contrôle Après la Publication
D'abord, j'ai 3 zones de texte, liste déroulante, Case à cocher, et 2 LinkButtons dans une table. Les zones de texte et DropDownList doit faire une AutoPostBack parce qu'il y a certains calculs fait sur le côté serveur qui l'a appelé par OnTextChanged.
Mon problème ici est que d'après le contenu de tout Contrôle (ce qui nécessite un PostBack) les modifications et que vous tentez de déplacer le focus à n'importe quel autre Contrôle sur la page (qu'il s'agisse de tabulation ou à l'aide de la souris, cliquez sur n'importe quel autre Contrôle) le curseur ne se déplace pas vers le prochain point de Contrôle ou le Contrôle sur lequel vous avez cliqué.
J'ai essayé d'utiliser une méthode qui trouve le Contrôle en cours et sur la base des TabIndex, ajoute 1 qui se déplace le focus sur le contrôle suivant. Le problème ici est qu'il ne permet pas de se concentrer à être fixé sur n'importe quel autre Contrôle autre que celui avec le prochain TabIndex. Pour mieux expliquer ici est un exemple de la situation.
Exemple: j'ai TextBox1, TextBox2, et TextBox3. - Je modifier le contenu en TextBox2 souhaitez ensuite passer vers l'arrière pour TextBox1. Quand je clique dans TextBox1 le focus est mis à TextBox3 étant donné que le code est l'aide de l'ordre de la propriété TabIndex. ** Un facteur clé ici est que TextBox1 NE se concentrer avant que le serveur de code côté des feux mais perd le focus et la met sur la TextBox3 **
Pour moi, il semble que la seule façon dont ceci peut être accompli serait d'ajouter une fonction sur le côté client qui trouve le Contrôle avec la mise au point avant la Publication se produit, réinitialisez l'accent sur le Contrôle après le code côté serveur est terminée. Il ne semble pas que ce que je fais sur le serveur côté travail, puisque l'accent a déjà été perdu lorsque cela se produit.
J'ai cherché et cherché mais n'ont pas été en mesure de trouver une solution à ce problème particulier, tout ce que j'ai trouvé traite de la mise au point à la commande SUIVANTE à la place de la commande que vous souhaitez avoir le focus. Toute aide serait grandement appréciée. Je vous remercie à l'avance.
Ici c'est le code que j'utilise pour passer à la prochaine commande basée sur le TabIndex mais cela ne fonctionne pas dans ma situation.
protected void Page_Load(object sender, EventArgs e)
{
WebControl ctrl = GetPostBackControl() as WebControl;
if (ctrl != null && !SetNextFocus(Controls, ctrl.TabIndex + 1)) { ctrl.Focus(); }
}
public Control GetPostBackControl()
{
Control control = null;
string ctrlname = Request.Params.Get("__EVENTTARGET");
if (ctrlname != null && ctrlname != string.Empty)
{
control = FindControl(ctrlname);
control.Focus();
}
else
{
foreach (string ctl in Request.Form)
{
Control c = FindControl(ctl);
if (c is Button)
{
control = c;
break;
}
}
}
return control;
}
private bool SetNextFocus(ControlCollection controls, int tabIndex)
{
foreach (Control control in controls)
{
if (control.HasControls())
{
bool found = SetNextFocus(control.Controls, tabIndex);
if (found) { return true; }
}
WebControl webControl = control as WebControl;
if (webControl == null) { continue; }
if (webControl.TabIndex != tabIndex) { continue; }
webControl.Focus();
return true;
}
return false;
}
OriginalL'auteur Brian | 2011-09-06
Vous devez vous connecter pour publier un commentaire.
Essayer de faire quelque chose comme cela pour conserver la mise au point après la publication:
J'ai créé une nouvelle solution, dupliqué le problème et essayé votre code qui a fait un travail mais malheureusement dans mon cas, il cartonne la page de pause. J'ai ajouté le code ci-dessous qui a résolu le problème que j'avais. Merci encore pour votre aide!
OriginalL'auteur James Johnson
Vous remercier pour l'aide, il ne me rapprocher un peu plus. La seule chose qui l'empêchait de fonctionner correctement, c'est que ma page a certaines variables qui sont reportés à partir d'autres pages. Lorsque la page se charge, le remplacement est à l'origine de la page de rompre, car il est impossible de localiser ces contrôles. J'ai été en mesure de résoudre le problème en ajoutant un HiddenField sur le .page aspx et en ajoutant le code suivant à la onload() fonction:
ainsi que l'ajout d'une nouvelle fonction qui est appelée sur chacune des zones de texte:
J'ai fini par ne pas avoir à apporter des modifications dans le code derrière. Encore une fois, merci pour l'aide!
OriginalL'auteur Brian