我正在使用vb.net创建一个webapp,我需要在UpdatePanel中创建一个TextBox,以便在PostBack之后将焦点更改为另一个文本框。我决定使用一个ViewState来保存一个numbre,它将在加载时读取,以便知道焦点应该在哪里(有七个文本框应该像那样工作),但我不能只做一个工作。 这是最小的代码,不起作用。
Dim g As Integer
g = 1
ViewState.Add("foco", g)
这是Page_Load。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
If ViewState("foco") = 1 Then
TextBox1.Focus()
End If
End If
End Sub
答案 0 :(得分:0)
看起来你没有在回发之间递增计数器。
If Page.IsPostBack Then
If ViewState("foco") = 1 Then
TextBox1.Focus()
ElseIf ViewState("foco") = 2 Then
TextBox2.Focus()
ElseIf ViewState("foco") = 3 Then
TextBox3.Focus()
End If
ViewState("foco") = ViewState("foco") + 1
Else
ViewState.Add("foco", 1)
End If
答案 1 :(得分:0)
何时向ViewState添加值的代码是什么?
“不起作用”是什么意思?你期望发生什么,以及实际发生了什么?
在任何情况下,最简单的方法可能是向ViewState支持的Page添加一个属性,例如:
public int FocusIndex
{
get
{
object o = ViewState["foco"];
return (o == null) ? -1 : (int) o;
}
set
{
ViewState["foco"] = value;
}
}
答案 2 :(得分:0)
Protected Sub TextBox7_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox7.TextChanged
If TextBox7.Text = "" Then Exit Sub
' ListBox1.Visible = True
ListBox1.Items.Clear()
Dim con As New Data.OleDb.OleDbConnection("Provider=SQLOLEDB;Data Source=TEST08\AXSQLEXPRESS;Password=Axoft1988;User ID=sa;Initial Catalog=club_independiente")
con.Open()
'Dim com As New Data.OleDb.OleDbCommand("select * from emCaja where cod_client = '" & TextBox1.Text & "'", con)
' If "" & com.ExecuteScalar() = "" Then
Dim com As New Data.OleDb.OleDbCommand
com = New Data.OleDb.OleDbCommand("select * from emConceptos where codigo = " & TextBox7.Text, con)
com.ExecuteNonQuery()
Dim dr As Data.OleDb.OleDbDataReader
dr = com.ExecuteReader
While dr.Read
ListBox1.Items.Add(dr("descripcion"))
ListBox1.Items(ListBox1.Items.Count - 1).Value = dr("codigo")
End While
dr.Close()
' ListBox1.Focus()
If ListBox1.Items.Count > 0 Then
ListBox1.SelectedIndex = 0
End If
Dim g As Integer
g = 1
Session("foco") = g
End Sub
答案 3 :(得分:0)
您正在做的事情不起作用,因为page_load方法在TextChanged事件有机会执行之前运行。
试试这个:
将page_load逻辑放在page_preRender事件中,保证在textchanged事件之后触发;
Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
If Page.IsPostBack Then
If ViewState("foco") = 1 Then
ScriptManager1.SetFocus(TextBox1)
End If
End If
End Sub