KeyPress 不足以进行这种验证。绕过它的一种简单方法是使用 Ctrl+V 将文本粘贴到文本框中。或者上下文菜单,根本没有关键事件。
在这种特定情况下,TextChanged 事件将完成工作:
private void textBox_TextChanged(object sender, EventArgs e) {
var box = (TextBox)sender;
if (box.Text.StartsWith(".")) box.Text = "";
}
但是验证数值还有很多。您还需要拒绝 1.1.1 或 1.-2 等内容。请改用 Validating 事件。在表单上放置一个 ErrorProvider 并像这样实现事件:
private void textBox_Validating(object sender, CancelEventArgs e) {
var box = (TextBox)sender;
decimal value;
if (decimal.TryParse(box.Text, out value)) errorProvider1.SetError(box, "");
else {
e.Cancel = true;
box.SelectAll();
errorProvider1.SetError(box, "Invalid number");
}
}