foreach (Control ctl1 in this.tabPage1.Controls)
{
foreach (Control ctl2 in ctl1.Controls)
{
//TextBox tb = ctl2 as TextBox;
if ((ctl2 is TextBox) && (ctl2.Visible == true))
{
if (((TextBox)ctl2).Text.Trim().Length == 0)
{
MessageBox.show("输入数据不能为空,请输入数据!");
((TextBox)ctl2). focus;
return;
}}}}//为节省博客空间,这里括号写在一行。
最后焦点总是在在最后一个为空的textbox。
比如有三个空的textbox,焦点将停留在最后一个textbox,请教高手指点后得知原因是:
在WinForm里,后加入的control的Z-order值比先加入的小,最后加入的control的z-order值为0。
foreach是按照z-order的值从小到大进行遍历的。
为了让focus在第一个为空的textbox处,改写代码如下:
TextBox tb = txt_1;//先任意指定一个对象给tb引用。
int i = 0;
foreach (Control ctl1 in this.tabPage1.Controls)
{
foreach (Control ctl2 in ctl1.Controls)
{
//TextBox tb = ctl2 as TextBox;
if ((ctl2 is TextBox) && (ctl2.Visible == true))
{
if (((TextBox)ctl2).Text.Trim().Length == 0)
{
tb = ctl2 as TextBox;
i += 1;
}
}
}
}
if (i != 0)
{
MessageBox.Show("输入数据不能为空值,请输入数据!");
tb.Focus();
return;
}
ps:z-order可以这样等到(应该是z-order的值吧?):
this.tabpage1.Controls.GetChildIndex (Control child);
可以这样来设置:
this.tabpage1.Controls.SetChildIndex (Control child,int newIndex);
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7946503/viewspace-1003070/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7946503/viewspace-1003070/