我必须创建6个仅接受数字的textBoxes。我为此目的使用了keyPress事件。但我必须重复相同的eventHandler代码6次,这只是在formComponent的名称中有所不同。任何人都可以解释如何减少代码的大小?请。代码是
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsDigit(e.KeyChar) || (e.KeyChar == (char)Keys.Back) || e.KeyChar == '.' && !textBox1.Text.Contains('.'))
{
return;
}
else if (e.KeyChar == (char)Keys.Back)
{
return;
}
else if (e.KeyChar == '.' && !textBox1.Text.Contains('.'))
{
return;
}
else
{
e.Handled = true;
Console.Beep(1000, 500);
MessageBox.Show("Only numbers allowed!","Error");
}
}
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsDigit(e.KeyChar) || (e.KeyChar == (char)Keys.Back) || e.KeyChar == '.' && !textBox1.Text.Contains('.'))
{
return;
}
else if (e.KeyChar == (char)Keys.Back)
{
return;
}
else if (e.KeyChar == '.' && !textBox1.Text.Contains('.'))
{
return;
}
else
{
e.Handled = true;
Console.Beep(1000, 500);
MessageBox.Show("Only numbers allowed!", "Error");
}
} AND THIS REPEATS FOR 4 MORE TIMES
答案 0 :(得分:4)
您可以订阅相同的方法并将sender
对象转换为特定控件,以下是您的代码示例:
private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
var textBox=(TextBox)sender; //text box which raised the event
if (char.IsDigit(e.KeyChar) || (e.KeyChar == (char)Keys.Back) || e.KeyChar == '.' && !textBox.Text.Contains('.'))
{
return;
}
else if (e.KeyChar == (char)Keys.Back)
{
return;
}
else if (e.KeyChar == '.' && !textBox.Text.Contains('.'))
{
return;
}
else
{
e.Handled = true;
Console.Beep(1000, 500);
MessageBox.Show("Only numbers allowed!","Error");
}
}
订阅活动:
textBox1.KeyPress+=textBox_KeyPress;
textBox2.KeyPress+=textBox_KeyPress;
...
或者您可以从IDE中的Property Grid为KeyPress
事件选择相同的方法
答案 1 :(得分:0)
我以这种方式调用了事件函数。
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
textBox_KeyPress(sender,e);
}