日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

刷新后控制TAB键到下一个控件

發(fā)布時(shí)間:2025/3/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 刷新后控制TAB键到下一个控件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
頁(yè)面上的控件能一直TAB下去,這是系統(tǒng)的一個(gè)很基本的要求。在網(wǎng)上沒(méi)有搜索到相關(guān)的方法。我覺(jué)得一般做法都是使頁(yè)面無(wú)刷新,但是如果遇到頁(yè)面不得不刷新的情況,如何去控制呢?
?? 思路是很簡(jiǎn)單的,首先是獲取引起postback的控件,?? Control?ocontrol?=?this.FindControl(Request.Form["__EVENTTARGET"]);//"_EVENTTARGET"記錄了上次引發(fā)postback事件的控件ID。 ? 接著我自然會(huì)想到找到該控件的下一個(gè)控件,然后focus(),通過(guò)Page.Controls是可以找到,但是我認(rèn)為這可能無(wú)法避免hardCode,因?yàn)樵诜?wù)器段不好判斷一個(gè)Control是否可以focus().
??找了一些資料,我從 document.onkeydown?=?new?Function("if(event.keyCode==13){event.keyCode=9;}?"); ? 得到啟發(fā),我想,我讓引發(fā)PostBack的控件獲得焦點(diǎn),然后引發(fā)一個(gè)tab鍵的事件,焦點(diǎn)自然會(huì)移到下一個(gè)控件,于是我經(jīng)過(guò)一番折騰,得到了一個(gè)結(jié)論,這是不行的,為什么不行,我也不知道。測(cè)試代碼如下:
?? <%@?Page?Language="C#"?AutoEventWireup="true"??CodeFile="Default.aspx.cs"?Inherits="_Default"?%>

<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html?xmlns="http://www.w3.org/1999/xhtml">
<head?id="Head1"?runat="server">
????
<title>Untitled?Page</title>

????
<script>
????
function?ControlFocus(){
??????
var?Ka=document.createEventObject();?
???????Ka.ctrlKey
=false;?
???????Ka.keyCode
=9;?
???????document.fireEvent(
"onkeydown",Ka);
???????}
????document.onkeydown?
=?new?Function("if(event.keyCode==9){alert('Tab');}?");
??
//該事件僅是測(cè)試時(shí)使用
????</script>

</head>
<body>
????
<form?id="form1"?runat="server">
????????
<div>
????????????
<input?type="text"?id="test"?style="color:?Red;?border:?0;"?onblur="ControlFocus();"?/>
????????????
<asp:TextBox?ID="TextBox1"?runat="server"></asp:TextBox>
????????????
<asp:TextBox?ID="TextBox2"?runat="server"></asp:TextBox>
????????????
<asp:TextBox?ID="TextBox3"?runat="server"></asp:TextBox>
????????????
<asp:TextBox?ID="TextBox4"?runat="server"></asp:TextBox>
????????????
<asp:TextBox?ID="TextBox5"?runat="server"></asp:TextBox></div>
????
</form>

</body>
</html>
? 按我的想法,當(dāng)test失去焦點(diǎn)的時(shí)候引發(fā)事件調(diào)用ControlFocus()函數(shù),然后引發(fā)一個(gè)Tab鍵,結(jié)果Tab鍵是引發(fā)了(測(cè)試時(shí)能彈出'Tab'),但是焦點(diǎn)卻沒(méi)有轉(zhuǎn)移到下一個(gè)控件。查了很多資料也得不到解釋,我想既然能通過(guò)enter鍵轉(zhuǎn)化為tab鍵控制焦點(diǎn),那么我編程引發(fā)tab鍵應(yīng)該有同樣的效果,結(jié)果卻不是,網(wǎng)上也不到有關(guān)的解釋,有高手知道希望解釋一下.

? 沒(méi)辦法,只能通過(guò)在服務(wù)器端找到下一個(gè)控件的辦法來(lái)實(shí)現(xiàn),雖然沒(méi)多高的技術(shù)含量,還是發(fā)出來(lái)給大家看一下: ????????//這里是配置文件寫的可focus的控件,因?yàn)橛惺褂玫谌娇丶?/span>
????????string?FocusAbleControlList?=?System.Configuration.ConfigurationSettings.AppSettings["AbleFocusControlList"];

????????
private?bool?isFocusAble(string?ControlType)
????????{
????????????
if?(FocusAbleControlList.IndexOf(","?+?ControlType?+?",")?<?0)
????????????{
????????????????
return?false;
????????????}
????????????
else
????????????{
????????????????
return?true;
????????????}
????????}

????????
protected?override?void?OnLoad(EventArgs?e)
????????{
????????????
base.OnLoad(e);
????????????
if?(Request.Form["__EVENTTARGET"]?!=?null)
????????????{
????????????????Control?ocontrol?
=?this.FindControl(Request.Form["__EVENTTARGET"]);
????????????????
if?(ocontrol?!=?null)
????????????????{
????????????????????
foreach(Control?con?in?this.Controls)
????????????????????{
??????????????
//多個(gè)from的情況,這里就hardcode了
????????????????????????if?(con.ID?!=?null?&&?con.ID.ToLower().IndexOf("form")?>?-1)?????????????????????????{
????????????????????????????
int?index?=?con.Controls.IndexOf(ocontrol);
????????????????????????????
if(index?!=?-1)
????????????????????????????{
????????????????????????????????
bool?isableFocous?=?false;
????????????????????????????????
while?(!isableFocous)
????????????????????????????????{
????????????????????????????????????index
++;
????????????????????????????????????
string[]?temp?=?con.Controls[index].ToString().Split('.');
????????????????????????????????????
string?typename?=?temp[temp.Length?-?1];
????????????????????????????????????isableFocous?
=?isFocusAble(typename);
????????????????????????????????}
????????????????????????????????con.Controls[index].Focus();
????????????????????????????}
????????????????????????}
????????????????????}

????????????????}
????????????}
????????}

?
?? 發(fā)此文的更多是希望能看到各位的思路,我認(rèn)為要實(shí)現(xiàn)這個(gè)功能應(yīng)該還有更簡(jiǎn)單的方法。
???
??
??

轉(zhuǎn)載于:https://www.cnblogs.com/yfx1982/archive/2007/12/11/991077.html

總結(jié)

以上是生活随笔為你收集整理的刷新后控制TAB键到下一个控件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。