문제

페이지에 3 개의 텍스트 상자 컨트롤이 있습니다

<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를 사용하여 텍스트 상자를 자동으로 선택하는 것입니다 ( 작은 JB의 문제). 실제로 System.web.ui.literalControl (WebControl.controls는 실제로 literalControls를 포함 함)에서 System.Web.ui.WebControls.webControl에서 캐스트하는 것이 불가능하기 때문에 InvalidcastException을받습니다.

나는이 aproach를 어떻게 든 작동하는 솔루션을받을 수있는 것이 관심이 있습니까? 고맙습니다!

도움이 되었습니까?

해결책

유형

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

다른 팁

주어진 유형의 컨트롤 만 리턴하기 위해 OfType 메소드를 사용할 수 있어야합니다.

예를 들어

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

문제는 LeteralControl이 WebControl에서 상속되지 않는다는 것입니다. 그래도 초점을 맞출 수는 없으므로 선택하지 않아도됩니다. LINQ 명령문에서 웹 콘트롤을 확인하는 다른 조건을 추가하십시오. 그래서 당신의 위치는 어디에 있어야합니다 where control.TabIndex > changed_control.TabIndex && control is WebControl.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top