C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■87118 / 親階層)  動的コントロールのカーソルセット(その2)
□投稿者/ passop (7回)-(2018/04/13(Fri) 11:30:03)

分類:[ASP.NET (VB)] 

2018/04/13(Fri) 12:49:09 編集(投稿者)
以前、こちらに以下の質問をさせて頂きました件で
カーソル動作の改善をしたいと考えております。

http://bbs.wankuma.com/index.cgi?mode=al2&namber=86861

こちらの解決策にありますように
PageRequestManager のイベントの処理を追加することにより、
ポストバックが発生した動的コントロールにフォーカスをセットして、
カーソルが戻るようになりましたが、もう少しカーソルな動きを
自然にしようと思っています。

そこで、TABキーを入力することによって、
次の動的コントールにカーソルを移動しようと変更しましたが、
TABキー以外を入力でも次のコントールにカーソルが移動してしまいます。

どのようにすればTABキーを入力したときのみ
次のコントールにカーソルが移動するようになるのでしょうか?

申し訳ありませんが、教えてください。

(VB.NET側コード)
   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'ポストバックの場合
        'ページ内のTableコントロールからデータセットを作成
        If IsPostBack Then
            TextBoxButtonMaking(Table1, 1)
        End If
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Me.TextBoxButtonMaking(Table1, 1)

    End Sub

    '//////// 動的コントロール作成ルーチン /////
    Private Sub TextBoxButtonMaking(ByVal tTable As Table, ByVal No As Integer)
        '行数
        Dim rowCnt As Integer = 3
        '列数
        Dim colCnt As Integer = 3

        If tTable.Rows.Count > 0 Then
            Exit Sub
        End If

        For j = 1 To rowCnt
            Dim tRow As New TableRow()
            For i As Integer = 1 To colCnt
                AddCellCreate(tRow, j, i, No)
            Next i
            'テーブルに新しい行を追加
            tTable.Rows.Add(tRow)

        Next j

    End Sub

    Private Sub AddCellCreate(ByVal tRow As TableRow, ByVal rowCtr As Integer, ByVal cellCtr As Integer, ByVal TableNo As Integer)

        Dim prodID As String = ""
        'IDを作成

        prodID = TableNo.ToString & "_" & rowCtr & "_" & cellCtr

        Dim tCell As New TableCell()
        tCell.HorizontalAlign = HorizontalAlign.Center
        tCell.Wrap = False
        tCell.ViewStateMode = UI.ViewStateMode.Enabled
        'TextBoxコを作成
        Dim ctrl As New TextBox
        ctrl.ID = "txt" & prodID
        ctrl.Text = ctrl.ID
        ctrl.AutoPostBack = True
        ctrl.EnableViewState = True
 
        'セルに追加
        tCell.Controls.Add(ctrl)
        '行に新しいセルを追加
        tRow.Cells.Add(tCell)

    End Sub


(JavaScript側コード)
<script type="text/javascript">
    var manager;
    var postBackElementId;

    function pageLoad(sender, args) {
        if (args.get_isPartialLoad() === false) {
            manager = Sys.WebForms.PageRequestManager.getInstance();
            manager.add_initializeRequest(OnInitializeRequest);
            manager.add_pageLoaded(OnPageLoaded);
        }
    }

    function OnInitializeRequest(sender, args) {
        postBackElementId = args.get_postBackElement().id;
    }

    function OnPageLoaded(sender, args) {
        if (postBackElementId) {
            var es = document.getElementsByTagName('*');

            for (var i = 0; i < es.length; i++) {
                if (es[i].id == postBackElementId) {
                    setNextFocus(es, i);
                }
            }

        }
    }

    function setNextFocus(es, cur_pos) {
        for (var i = cur_pos + 1; i < es.length; i++) {
            var elem = document.getElementById(es[i].id);
            if (elem != null) {
                elem.focus();
                break;
            }
        }
    }

</script>

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
親記事 →Re[1]: 動的コントロールのカーソルセット(その2) /WebSurfer
 
上記関連ツリー

動的コントロールのカーソルセット(その2) / passop (18/04/13(Fri) 11:30) #87118 ←Now
Re[1]: 動的コントロールのカーソルセット(その2) / WebSurfer (18/04/13(Fri) 13:06) #87119
  └ Re[2]: 動的コントロールのカーソルセット(その2) / passop (18/04/13(Fri) 13:44) #87120
    └ Re[3]: 動的コントロールのカーソルセット(その2) / WebSurfer (18/04/13(Fri) 14:23) #87122
      └ Re[4]: 動的コントロールのカーソルセット(その2) / passop (18/04/13(Fri) 18:29) #87132
        └ Re[5]: 動的コントロールのカーソルセット(その2) / WebSurfer (18/04/13(Fri) 19:01) #87133
          └ Re[6]: 動的コントロールのカーソルセット(その2) / passop (18/04/14(Sat) 09:35) #87136 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信