个人理解:WinForm中Focus()和TabIndex
来源:互联网 发布:淘宝主图抠图能用吗 编辑:程序博客网 时间:2024/05/17 01:32
http://www.cnblogs.com/jaywingod/archive/2008/01/26/1054314.html
首先我们来看一下$对TabIndex的解释。
针对WebForm的解释:
异常类型 条件 注意 当时一个负责UI的同事告诉我,TabIndex从1开始,设置为0,将无效,并发了这篇文章给我看。但是由于我在试验的过程中发现,设置为0的控件首先获得焦点,所以就抱着怀疑的态度看完了这篇文章,再仔细一看,才发现在这个是WebControl的接受,于是我接着搜,发现下面的介绍:
没有对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中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 键顺序按它们的声明顺序排列。
只有具有非零选项卡索引的控件才呈现 tabindex 属性。
通过将 TabIndex 属性设置为负值,可以从 Tab 键顺序中移除 Web 服务器控件。
备注
Tab 键索引较低的控件将先于 Tab 键索引较高的控件接收焦点。
通过观察,我个人得出以下结论:
在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中Focus()和TabIndex
- TabIndex
- 小议JQuery中focus()和focusin()区别
- tabIndex 和 aria注意点
- opengl 中glpushmatrix和glpopmatrix函数的个人理解
- 对于angular 中MVC 和 MVVM 的一些个人理解
- Mybatis中XML开发和注解开发 个人理解
- Python中range()的作用,和我个人的理解
- java中hashmap的个人理解和分析(1.8版本)
- Winform的控件执行顺序 如何设置TabIndex
- jQuery中focusin()和focus()、find()和children()的区别
- js模拟Ctrl+C复制、Ctrl+V粘贴功能之tabindex、focus、keyCode
- html中input标签的tabindex属性
- CSS中tabIndex、label、fieldset标签学习
- html中tabindex属性是啥意思
- html 中 TabIndex 属性 的含义
- html 中 TabIndex 属性 的含义
- jQuery中blur和focus事件的应用
- 使用计算机必懂的53个英文单词和缩写
- 李嘉诚给年轻商人的98条忠告
- C# 获得当前鼠标的屏幕中间坐标(c#)
- 类,抽象类,接口和继承之间的关系
- 50个sql语句
- 个人理解:WinForm中Focus()和TabIndex
- pl sql 登录初始化错误
- Idic(十分小巧的英汉发声词典)
- Tapestry学习笔记(乱码的解决方法)
- 创业话题
- 国庆19万人广场看升旗,我在其中--国庆59周年
- POJ3620
- 全排列算法汇总(C++版)
- dataGridView常用属性方法详解