سؤال

ولدي ثلاثة عناصر تحكم مربع نص على الصفحة

<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">

و معالج الحدث

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();
}

ومعنى هذا الرمز هو حدد تلقائيا مربع نص مع TabIndex المقبل بعد صفحة بعد الظهر (انظر <لأ href = "https://stackoverflow.com/questions/173810/autopostback-with-textbox-loses-focus-question من صنع-أكثر وضوحا "> المشكلة ليتل JB في ). في الواقع أتلقى InvalidCastException لأنه من المستحيل أن يلقي من System.Web.UI.LiteralControl (WebControl.Controls يحتوي في الواقع LiteralControls) لSystem.Web.UI.WebControls.WebControl.

وأنا مهتم هل من الممكن تعديل هذه aproach بطريقة أو بأخرى في الحصول على العمل الحل؟ شكرا لك!

هل كانت مفيدة؟

المحلول

OfType

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

نصائح أخرى

ويجب أن تكون قادرة على استخدام الأسلوب OfType، فقط ليعود الضوابط من نوع معين.

ومنها مثلا.

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

والمشكلة هي أن LiteralControl لا يرث من WebControl. لا يمكن أن يكون التركيز على الرغم من ذلك لا بأس من عدم تحديدها. في بيان LINQ، إضافة شرط آخر التحقق من وجود WebControl. لذلك ينبغي أن where control.TabIndex > changed_control.TabIndex && control is WebControl السطر حيث الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top