gpt4 book ai didi

c# - 在自动回发功能后将焦点设置回正确的文本框(Page.SetFocus 没有解决问题)

转载 作者:行者123 更新时间:2023-11-30 21:55:17 26 4
gpt4 key购买 nike

现在,这可能看起来是重复的,但它不是。Internet 上的每个解决方案都向您展示了如何将焦点放在触发事件的文本框上。

但是如果用户按下 Tab 键呢?应该具有焦点的文本框是下一个。因此,我们采取了一种解决方法,将重点放在 TabIndex 高于触发事件的文本框上。

但是如果用户按下 Shift+tab 会怎样?更糟糕的是:如果用户点击另一个随机文本框会怎样?

这就是问题所在。我认为这里不需要代码,因为它是将焦点设置在具有自动回发功能的文本框上的通用解决方案。如果需要代码,请在评论中询问。

最佳答案

以下将允许你做你想做的事:

我们需要做的是让 js 协助下一个控件,在这种情况下,任何获得焦点的控件(无论是通过选项卡、shift-tab、单击,还是跳出文本的任何控件组合框并放到不同的控件上)。通过使用 WebMethod,我们可以将此信息传递到服务器以获取 AutoPostBack 焦点。

网络方法:

[WebMethod]
public static void set_nextFocus(string id)
{
_toFocus = id;
}

很简单,_toFocus 是类变量 static string _toFocus ,它保存下一个要聚焦的控件的值。

页面加载

protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
//sets focus to the proper control
Page.SetFocus(Page.FindControl(_toFocus));
}
}

JavaScript

<head>

<script type="text/javascript">
function setFocus(x) {
PageMethods.set_nextFocus(x);
}
</script>

ASP控件

在这个例子中,一个文本框。注意 OnFocusIn 的使用。 ASP控件的expando属性,实现没有服务器端定义,还原为javascript的onfocusin属性。

<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" TabIndex="1" 
ontextchanged="TextBox1_TextChanged" OnFocusIn="setFocus(this.id)" >
</asp:TextBox>

此外,为了使用 PageMethods,您必须在表单中启用它,如下所示:

<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />

关于c# - 在自动回发功能后将焦点设置回正确的文本框(Page.SetFocus 没有解决问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com