c#遍历panel控件中的textbox,验证textbox输入的合法性…………
说明:一个panel控件中有很多textbox,每个textbox中只允许输入3个数字,当输入的数字达到3个后焦点自动切换到下一个textbox。问题:怎样遍历textb...
说明:
一个panel控件中有很多textbox ,每个textbox中只允许输入3个数字,当输入的数字达到3个后焦点自动切换到下一个textbox 。
问题:
怎样遍历textbox验证其输入的合法性,并在满足条件后切换焦点。或者有其它的什么好办法? 展开
一个panel控件中有很多textbox ,每个textbox中只允许输入3个数字,当输入的数字达到3个后焦点自动切换到下一个textbox 。
问题:
怎样遍历textbox验证其输入的合法性,并在满足条件后切换焦点。或者有其它的什么好办法? 展开
4个回答
展开全部
1. 我的示例中有3个TextBox控件,他们的TabIndex属性分别是0,1,2
2. 我将3个TextBox的KeyPress事件都设为同一个,在我的示例中是textBox1_KeyPress
3. 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,你会发现里没有任何内容显示。
}
}
2. 我将3个TextBox的KeyPress事件都设为同一个,在我的示例中是textBox1_KeyPress
3. 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,你会发现里没有任何内容显示。
}
}
展开全部
好办法不知道,只会给每个textbox加textchanged事件。。。这样做少量的话还可以,大量的话。。。。。。效率应该很有问题。
当然这种做法可以逐个控件设置其属性,也可以用代码较为“优雅”的实现
当然这种做法可以逐个控件设置其属性,也可以用代码较为“优雅”的实现
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议你用maskedtextbox
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
}
用这种吧,这个更快点
{
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;
}
}
用这种吧,这个更快点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询