如何阻止文本框中的第一个字符成为'.'?

D.H*_*ain 0 .net c# textbox keypress winforms

这是我目前的代码:

private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && e.KeyChar != '.';
    if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1) e.Handled = true; 

}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 6

KeyPress不足以进行这种验证.绕过它的一种简单方法是使用Ctrl + V将文本粘贴到文本框中.或者上下文菜单,根本没有关键事件.

在这种特定情况下,TextChanged事件将完成工作:

    private void textBox_TextChanged(object sender, EventArgs e) {
        var box = (TextBox)sender;
        if (box.Text.StartsWith(".")) box.Text = "";
    }
Run Code Online (Sandbox Code Playgroud)

但是,验证数值还有很多.您还需要拒绝诸如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");
        }
    }
Run Code Online (Sandbox Code Playgroud)