个人理解:WinForm中Focus()和TabIndex

转载 2008年10月03日 12:29:00
http://www.cnblogs.com/jaywingod/archive/2008/01/26/1054314.html

    最近在做一个WinForm的项目,发现一些问题,还是与WebForm有较大的不同。由于我对UI的东西不是很熟,所以在一些简单的问题上,遇到不少的麻烦,其中一个就是控件的Focus()方法和TabIndex属性。
    首先我们来看一下$对TabIndex的解释。
    针对WebForm的解释:

C#
public virtual short TabIndex { get; set; }

属性值

Web 服务器控件的选项卡索引。默认值为 0,表示未设置此属性。
异常类型 条件

ArgumentOutOfRangeException

指定的选项卡索引不在 -32768 和 32767 之间。

使用 TabIndex 属性指定或确定 Web 窗体页上 Web 服务器控件的选项卡索引。当按 Tab 键时,Web 服务器控件接收焦点的顺序由每个控件的 TabIndex 属性确定。当最初加载页时,按 Tab 键时接收焦点的第一项是地址栏。然后,Web 窗体页上控件的 Tab 键顺序根据每个控件的 TabIndex 属性值,从最小的非零正值开始按升序排列。如果多个控件共享同一选项卡索引,则这些控件将按它们在 Web 窗体页上的声明顺序接收焦点。最后,具有零选项卡索引的控件的 Tab 键顺序按它们的声明顺序排列。

Note注意

只有具有非零选项卡索引的控件才呈现 tabindex 属性。

通过将 TabIndex 属性设置为负值,可以从 Tab 键顺序中移除 Web 服务器控件。

    当时一个负责UI的同事告诉我,TabIndex从1开始,设置为0,将无效,并发了这篇文章给我看。但是由于我在试验的过程中发现,设置为0的控件首先获得焦点,所以就抱着怀疑的态度看完了这篇文章,再仔细一看,才发现在这个是WebControl的接受,于是我接着搜,发现下面的介绍:

Tab 键索引较低的控件将先于 Tab 键索引较高的控件接收焦点。

    没有对0作特殊的说明。
   
    通过观察,我个人得出以下结论:

    在WinForm中,TabIndex
与“层”有关,假如有两个panel,panel1(里面有txtName,txtPassword)和Panel2(txtAddress,txtunit),那么,TabIndex的顺序是这样的。
首先在最外层(panel)选取index最小的控件,然后把光标定位到该panel中tabindex最小的控件上。这貌似在MSDN上没有提到。
        =============================================
    Focus()方法的用法。
    最开始,我在Form_Load()方法中设置this.txtName.Focus(),但是显示出来的结果不如人所愿,查MSDN,并没有什么发现, 于是试了好多中组合(与TabIndex),以为是父子控件的问题,通过试验发现,在Form_Load中这样写,可以实现设置焦点的功能:
this.txtName.Focus();
this.txtName.tabIndex = 0;
以为自己有了一个伟大的发现,但是,经过几次的试验,发现有时行,有时不行……难道有什么魔咒?
经过几番的试验,得出一个结论。(其实不知道正确与否)

关于Focus():
    “研究发现”,该方法并没有魔咒,也不是$的Bug,主要与他的使用位置有关。在http://www.cnblogs.com/michaellee /archive/2008/01/25/1053366.html中,提到,控件的Focus()与enable和visible有关,在 Form_Load中,该控件的visible属性不一定为true,所以,这个时候设置focus()不能成功。因此,要实现Focus(),可以这 样:
1、像刚才那篇文章的作者提到的,在Form_Load中这样写:
this.Show();
this.txtName.Focus();
但是我觉得这样的做法不是特别好,因为我们知道,在Form_Load事件之后,还有很多事件发生,我觉得在这些事件中设置焦点更好。
在Activated方法中实现:
this.txtName.Focus();
======================================================
    以上的一些观点和方法,只代表个人目前的浅薄认识,不保证正确,记在这里,供个人日后思考,也为感兴趣的朋友提供一个思考问题的方面,仅此而已。
======================================================

Winform的控件执行顺序 如何设置TabIndex

在winform桌面应用程序中常常会遇到用户要求尽量避免使用鼠标的操作,那么我们怎样更好的操作程序呢?这就要用到Tab键来调整控件的焦点从而更方便的操作!     添加一个windows窗体,在窗体上...
  • eryongyan
  • eryongyan
  • 2010年11月15日 19:26
  • 6434

TabIndex 属性 Tabindex="-1" 与Tabindex="0"、任意数字

html中的tabIndex属性可以设置键盘中的TAB键在控件中的移动顺序,即焦点的顺序。 把控件的tabIndex属性设成1到32767的一个值,就可以把这个控件加入到TAB键的序列中。 这...
  • chenlaoyang
  • chenlaoyang
  • 2012年12月10日 14:23
  • 13569

c# tabindex 顺序

  一个窗体上有多个textbox 控件,可以按tab键顺序跳转,但是今天遇到了要反着跳转的,在网上找了下,也还是找到了的private void textBox3_KeyPress(object s...
  • ping16002
  • ping16002
  • 2008年12月03日 23:29
  • 2298

thymeleaf参考手册

1、创建 html html xmlns:th="http://www.thymeleaf.org">html> 另外:xmlns:layout="http://www.ultra...
  • xuxuchuan
  • xuxuchuan
  • 2018年01月29日 09:41
  • 43

Thymeleaf

Thymeleaf是用于Web和独立环境的现代服务器端Java模板引擎。 Thymeleaf的主要目标是将优雅的自然模板带到您的开发工作流程中--HTML 能够在浏览器中正确显示,并且可以作为静...
  • qq_35393693
  • qq_35393693
  • 2018年02月05日 10:52
  • 44

WinFrom开发时设置TabIndex没有用怎么办?

肯定有控件在容器里面,例如GroupBox。可以这样,你把Groupbox的TabIndex设置为10的倍数,而且往大了设置(因为控件的TabIndex可能在20以内)。控件还是排序设置其TabInd...
  • JimFire
  • JimFire
  • 2009年03月03日 19:32
  • 1768

html 中 TabIndex 属性 的含义

参考地址:1、http://blog.163.com/huan12_8/blog/static/1305190902011274739628/2、http://www.imwangfu.com/tab...
  • u012119576
  • u012119576
  • 2016年08月22日 23:36
  • 2857

超级实用且不花哨的js代码大全

 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.src...
  • xiezhilei1984
  • xiezhilei1984
  • 2009年09月05日 11:08
  • 386

Sublime Text 3 (含:配置 C# 编译环境)

Sublime Text 3 http://www.sublimetext.com/3 http://www.sublimetext.com/3dev 1. 关闭自动更新    菜单:Pr...
  • liutong123987
  • liutong123987
  • 2018年01月26日 16:54
  • 31

div标签别样的属性——tabindex

今天做开发遇到一个问题,经过努力还是解决了,这次然我认识了div中一个新的属性tabindex,下面结合例子谈一下该属性的作用:...
  • wangshuxuncom
  • wangshuxuncom
  • 2014年06月19日 16:04
  • 4673
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:个人理解:WinForm中Focus()和TabIndex
举报原因:
原因补充:

(最多只允许输入30个字)