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

来源:互联网 发布:淘宝主图抠图能用吗 编辑:程序博客网 时间:2024/05/17 01:32
http://www.cnblogs.com/jaywingod/archive/2008/01/26/1054314.html

个人理解:WinForm中Focus()和TabIndex
    最近在做一个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();
======================================================
    以上的一些观点和方法,只代表个人目前的浅薄认识,不保证正确,记在这里,供个人日后思考,也为感兴趣的朋友提供一个思考问题的方面,仅此而已。
======================================================
原创粉丝点击