无论如何要概括 winForm 组件的 eventHandlers
Is there anyway to generalize eventHandlers for winForm components
我必须创建 6 个只接受数字的文本框。为此,我使用了 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
您可以订阅相同的方法并将 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;
...
或者您可以 select 对来自 IDE
中的 属性 网格的 KeyPress
事件使用相同的方法
我已经通过这种方式调用了事件函数。
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
textBox_KeyPress(sender,e);
}
我必须创建 6 个只接受数字的文本框。为此,我使用了 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
您可以订阅相同的方法并将 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;
...
或者您可以 select 对来自 IDE
中的 属性 网格的KeyPress
事件使用相同的方法
我已经通过这种方式调用了事件函数。
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
textBox_KeyPress(sender,e);
}