分類:[ASP.NET (VB)]
2018/03/29(Thu) 16:48:05 編集(投稿者)
動的にテキストボックスを作成しています。
テキストボックスをAutoPostBack = Trueに設定した場合は
TextChangeイベントでカーソルがどこかに行ってなくなるため、
focusをセットしています。
画面のちらつきをなくすために
UpdatePanelを使用したところ、focusをセットしても
カーソルがどこかに行ってしまいます。
UpdatePanelパネルはUpdateModeをAlwaysに設定しております。
動的にテキストボックスを作成する場合、
UpdatePanelを使用して、カーソルが消えないようにするには
どのようにすればよいかどなたかご存知ないでしょうか?
(以下コード)
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
'//////// 動的TextBox+Buttonコントロール作成ルーチン /////
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
AddHandler ctrl.TextChanged, AddressOf txtBox_TextChanged
'セルに追加
tCell.Controls.Add(ctrl)
'行に新しいセルを追加
tRow.Cells.Add(tCell)
End Sub
Private Sub txtBox_TextChanged(ByVal sender As System.Object, ByVal e As EventArgs)
Dim tb As TextBox
tb = Master.FindControl("MainContent").FindControl(sender.ID)
SetFocusText(tb)
End Sub
Sub SetFocusText(ByVal ctrl As Control)
Dim script As String = _
"<script language='JavaScript'>" _
+ "document.getElementById('" _
+ ctrl.ClientID _
+ "').focus(); <" + "/script>"
Me.ClientScript.RegisterStartupScript(Me.GetType(), "setfocus", script)
End Sub