ITPub博客

首页 > 应用开发 > IT综合 > 判断textbox为空,focus总是在最后一个为空的textbox的问题(foreach,z-order)

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

原创 IT综合 作者:ebreezee 时间:2008-04-27 14:43:27 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)
{

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博客 ” ,链接:https://blog.itpub.net/7946503/viewspace-1003070/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    26
  • 访问量
    103236