页面上的控件能一直TAB下去,这是系统的一个很基本的要求。在网上没有搜索到相关的方法。我觉得一般做法都是使页面无刷新,但是如果遇到页面不得不刷新的情况,如何去控制呢?
   思路是很简单的,首先是获取引起postback的控件,

Control ocontrol = this.FindControl(Request.Form["__EVENTTARGET"]);//"_EVENTTARGET"记录了上次引发postback事件的控件ID。

接着我自然会想到找到该控件的下一个控件,然后focus(),通过Page.Controls是可以找到,但是我认为这可能无法避免hardCode,因为在服务器段不好判断一个Control是否可以focus().
  找了一些资料,我从

document.onkeydown = new Function("if(event.keyCode==13){event.keyCode=9;} ");

得到启发,我想,我让引发PostBack的控件获得焦点,然后引发一个tab键的事件,焦点自然会移到下一个控件,于是我经过一番折腾,得到了一个结论,这是不行的,为什么不行,我也不知道。测试代码如下:

<%@ 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');} ");
  //该事件仅是测试时使用
    </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>

按我的想法,当test失去焦点的时候引发事件调用ControlFocus()函数,然后引发一个Tab键,结果Tab键是引发了(测试时能弹出'Tab'),但是焦点却没有转移到下一个控件。查了很多资料也得不到解释,我想既然能通过enter键转化为tab键控制焦点,那么我编程引发tab键应该有同样的效果,结果却不是,网上也不到有关的解释,有高手知道希望解释一下.

没办法,只能通过在服务器端找到下一个控件的办法来实现,虽然没多高的技术含量,还是发出来给大家看一下:

        //这里是配置文件写的可focus的控件,因为有使用第三方控件
        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)
                    {
              //多个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();
                            }
                        }
                    }

}
            }
        }

发此文的更多是希望能看到各位的思路,我认为要实现这个功能应该还有更简单的方法。

转载于:https://www.cnblogs.com/yfx1982/archive/2007/12/11/991077.html

刷新后控制TAB键到下一个控件相关推荐

  1. 给所有的Control加两个属性,实现回车键自动跳转到下一个控件

    最近一个朋友要做一个操作非常方便的Windows应用程序,就是希望通过按回车键或者上下键,在输入项之间自动跳转,国人都不习惯 使用Tab/Shift Tab在输入项之间的跳转.我之前也使用了一些别的方 ...

  2. 怎么把一个控件放到tab页面上去?_C/C++应用无障碍化如何支持Tab键浏览

    一.前言 我们知道,正常人操作电脑,只需一眼便能得知屏幕上的内容,要想激活某个控件,例如按钮等,只需将鼠标拖动过去点击即可. 但这对于盲人而言,却十分繁琐. 盲人使用屏幕阅读器来操作电脑,在使用某个软 ...

  3. android 取消控件焦点,C# 给一个控件去掉焦点

    给一个控件去掉焦点(如选中控件按钮button时,按钮出现方框显示): 例如给form这个窗体中的button按钮去焦点 1.首先在form这个窗体中拖一个label按钮,去文字,设置背景为透明: 2 ...

  4. qt 设置焦点 跳到下个控件_【Qt】Qt之Tab键切换焦点顺序【转】

    简介 Qt的窗口部件按用户的习惯来处理键盘焦点.也就是说,其出发点是用户的焦点能定向到任何一个窗口,或者窗口中任何一个部件. 焦点获取方式比较多,例如:鼠标点击.Tab键切换.快捷键.鼠标滚轮等. 习 ...

  5. IDEA自动补全tab键向下选择s-tab向上选择

    友情提醒 目前不完美,这样设置完后.tab键制表符功能会受到影响.目前没找到完美的解决办法. 目前是使用其他的按键来代替tab的功能. "代替tab inoremap ~ <Tab&g ...

  6. Unity 之 UGUI Dropdown下拉控件展开方向控制

    Unity 之 UGUI Dropdown下拉控件展开方向控制 有个需要控制下拉控件展开方向的需求,不得探索一下这个下拉方向是由那些属性控制的. 其实我们正常使用的时候你可以发现,下拉控件默认向下展开 ...

  7. 自定义可扩展叠加头部的下拉控件

    最近写了个下拉控件,和几个下拉的头部样式,下拉控件可以连续添加叠加几个头部视图 下面是没有添加任何头部尾部的视图下拉效果 一步一步来介绍,先介绍这个下拉效果,在介绍自定义的头部 首先在使用上,和普通的 ...

  8. android让一个控件跟上面控件对其,学个明白--Android控件架构

    Android控件架构 1.什么是View? View是Android中所有控件的基类.View是界面层的控件的一种抽象,它代表了一个控件.在Android中每个控件都会在界面中占得一块矩形的区域.在 ...

  9. 具有TreeView下拉控件的ComboBox

    具有TreeView下拉控件的ComboBox 没错,如标题所说的那样,在下拉框中是一个TreeView,但是,为什么我们需要这样的控件?事实上这样的需求我已经遇到很多次了,比如适用于:  当遇到层 ...

最新文章

  1. 2018-03-03-解决win下凭据删除不干净而无法登录共项目录的问题
  2. VC#打包部署全攻略之(一、添加卸载程序)
  3. 互联网主要安全威胁解读及应对方案大讨论 | 高可用架构系列
  4. DirectX10一变换(三)
  5. 【转】python装饰器
  6. python 时间差模块_python利用datetime模块计算时间差
  7. P4011 孤岛营救问题
  8. javascript promise
  9. 类特征注意机制融合Deeplabv3+语义分割
  10. 几行代码实现鼠标自动点击电脑屏幕指定位置,防止电脑或远程桌面休眠
  11. 微博黄v怎么认证:微博兴趣认证技巧
  12. c++超详细基础教程(快速入门)
  13. 利用pandas 读取pdf中的表格文件
  14. 卸载Office 16 Click-to-Run Extensibility Component详细步骤
  15. Jenkins(03):配置Jenkins自动发送邮件
  16. SSD固态盘已坏的数据就恢复不了吗?
  17. 《Python编程快速上手——让繁琐的工作自动化》读书笔记4
  18. inputStream 和FileInputStream 转换
  19. 服务器连接盘柜后盘符空间显示不对,服务器连接磁盘阵列柜
  20. 周志华西瓜书第三章学习笔记

热门文章

  1. 【Java面试宝典】深入理解JAVA虚拟机
  2. [以太坊源代码分析]III. 挖矿和共识算法的奥秘
  3. 三星t800Android 6.0,6.6毫米品质平板 三星GALAXY Tab S发布
  4. python绘制直角坐标系_小白学 Python 数据分析(16):Matplotlib(一)坐标系
  5. mob sdk vue 短信验证_短信接口那些事儿,你知道多少?
  6. JZOJ 5415. 【NOIP2017提高A组集训10.22】公交运输
  7. JZOJ 3875. 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)
  8. grep检索关键字的命令_linux系统中java线上问题常用排查命令
  9. 矩阵运算和文本处理中的分类问题
  10. 研究生应当具备的三种基本技能