Question

J'ai trois contrôles TextBox sur la page

<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"
        OnTextChanged="TextBox_TextChanged" TabIndex="1">
<asp:TextBox ID="TextBox2" runat="server" AutoPostBack="True"
        OnTextChanged="TextBox_TextChanged" TabIndex="2">
<asp:TextBox ID="TextBox3" runat="server" AutoPostBack="True"
        OnTextChanged="TextBox_TextChanged" TabIndex="3">

et un gestionnaire d'événements

protected void TextBox_TextChanged(object sender, EventArgs e)
{
    WebControl changed_control = (WebControl)sender;

    var next_controls = from WebControl control in changed_control.Parent.Controls
                        where control.TabIndex > changed_control.TabIndex
                        orderby control.TabIndex
                        select control;

    next_controls.DefaultIfEmpty(changed_control).First().Focus();
}

Ce code a pour but de sélectionner automatiquement TextBox avec le prochain TabIndex après la publication de la page suivante (voir Le problème de Little JB ). En réalité, je reçois InvalidCastException car il est impossible de transtyper à partir de System.Web.UI.LiteralControl (WebControl.Controls contient en fait LiteralControls) en System.Web.UI.WebControls.WebControl.

Je suis intéressé est-il possible de modifier cette approche en quelque sorte pour recevoir une solution de travail? Merci!

Était-ce utile?

La solution

OfType

from control in changed_control
  .Parent
  .Controls
  .OfType<WebControl>()

Autres conseils

Vous devriez pouvoir utiliser la méthode OfType pour ne renvoyer que les contrôles d'un type donné.

par exemple.

var nextcontrols = from WebControl control in     
                   Changed_control.Parent.Controls.OfType<TextBox>()... etc

Le problème est que LiteralControl n’hérite pas de WebControl. Cependant, il ne peut pas avoir le focus, donc c'est bien de ne pas les sélectionner. Dans votre instruction LINQ, ajoutez une autre condition vérifiant un contrôle Web. Donc, votre ligne where devrait être where control.TabIndex > modified_control.TabIndex & amp; & amp; le contrôle est WebControl .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top