判断textbox为空,focus总是在最后一个为空的textbox的问题(foreach,z-order)

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,请教高手指点后得知原因是:

[@more@]

在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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值