说明:一个panel控件中有很多textbox ,每个textbox中只允许输入3个数字,当输入的数字达到3个后焦点自动切换到下一个textbox 。 问题:怎样遍历textbox验证其输入的合法性,并在满足条件后切换焦点。或者有其它的什么好办法?
1. 我的示例中有3个TextBox控件,他们的TabIndex属性分别是0,1,22. 我将3个TextBox的KeyPress事件都设为同一个,在我的示例中是textBox1_KeyPress3. textBox1_KeyPress事件代码如下: private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar >= '0' && e.KeyChar <= '9')//用于控制是否是数字 { TextBox tb = (TextBox)sender; //事件中的sender指的就是触发这个事件的控件,所以可以用强制类型转换的方式,获得当前的TextBox控件。 if (tb.Text.Length == 2) //第3次输入的时候,textbox的内容已经有两个数字了。所以就是在这次输入完向下一个textbox跳。 { int tbTabIndex = tb.TabIndex; //这里是获得当前这个控件的TabIndex值是多少 foreach (Control c in panel1.Controls) //这里遍历Panel中的所有控件。 { if (c.GetType() == typeof(TextBox)) //这里判断遍历出来的每一个控件是否是TextBox控件 { if (c.TabIndex == tbTabIndex + 1) //如果是TextBox控件,就看看当前遍历到的这个控件的tabindex是否是当前出发事件的tabindex+1。这样就会按照0,1,2...n发展下去。 { c.Focus(); //如果满足+1,那么就把焦点移到当前遍历的这个控件上去。 break; //然后跳出循环。 } } } } } else { e.Handled = true; //如果不是数字取消输入的内容,效果就是,输入a,你会发现里没有任何内容显示。 } }
foreach(Controls ct in panel1){ if(ct is textBox) { textBox txt=(textBoxt)ct; txt.keyPress+= //这里你自己按tab键快速生成出来,我没开工具 }}然后再keypress判断,private void TextBox_KeyPress(object sender, KeyPressEventArgs e) { if(e.KeyChar!=8&&!Char.IsDigit(e.KeyChar)) { e.Handled = true; } }用这种吧,这个更快点