C#仅数字文本框控件

时间:2011-02-17 12:03:29

标签: c# textbox .net-3.5

我使用的是C#.NET 3.5,我的项目有问题。在C#Windows应用程序中,我想让textbox只接受数字。如果用户尝试输入字符,则消息应显示为"请仅输入数字",并且在另一个文本框中,它必须接受有效的email id消息,如果该消息无效。它必须显示无效的用户ID。

10 个答案:

答案 0 :(得分:13)

答案 1 :(得分:5)

从C#3.5开始,我假设你正在使用WPF。

只需从整数属性到文本框进行双向数据绑定。 WPF会自动为您显示验证错误。

对于电子邮件案例,从在setter中执行Regexp验证的字符串属性进行双向数据绑定,并在验证错误时抛出异常。

在MSDN上查找绑定。

答案 2 :(得分:4)

使用此代码:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            const char Delete = (char)8;
            e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
        }

答案 3 :(得分:2)

您可能希望在int.TryParse(string, out int)事件中尝试KeyPress(object, KeyPressEventArgs)来检查数值。对于其他问题,您可以使用正则表达式。

答案 4 :(得分:2)

我使用了@fjdumont提到的但在验证事件中的TryParse。

private void Number_Validating(object sender, CancelEventArgs e) {
    int val;
    TextBox tb = sender as TextBox;
    if (!int.TryParse(tb.Text, out val)) {
        MessageBox.Show(tb.Tag +  " must be numeric.");
        tb.Undo();
        e.Cancel = true;
    }
}

我将其附加到两个不同的文本框中,并在我的表单中初始化代码。

    public Form1() {
        InitializeComponent();
        textBox1.Validating+=new CancelEventHandler(Number_Validating);
        textBox2.Validating+=new CancelEventHandler(Number_Validating);
    }

我还添加了tb.Undo()以撤消无效更改。

答案 5 :(得分:2)

这种方式对我来说是正确的:

private void textboxNumberic_KeyPress(object sender, KeyPressEventArgs e)
{
     const char Delete = (char)8;
     e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
}

答案 6 :(得分:1)

您可以在TextBox的KeyPress事件中通过e.keychar检查Ascii值。

通过检查AscII值,您可以检查数字或字符。

同样,您可以编写逻辑来检查电子邮件ID。

答案 7 :(得分:1)

尝试此代码

// Boolean flag used to determine when a character other than a number is entered.
private bool nonNumberEntered = false;
// Handle the KeyDown event to determine the type of character entered into the control.
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    // Initialize the flag to false.
    nonNumberEntered = false;
    // Determine whether the keystroke is a number from the top of the keyboard.
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {
        // Determine whether the keystroke is a number from the keypad.
        if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
        {
            // Determine whether the keystroke is a backspace.
            if (e.KeyCode != Keys.Back)
            {
                // A non-numerical keystroke was pressed.
                // Set the flag to true and evaluate in KeyPress event.
                nonNumberEntered = true;
            }
        }
    }
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (nonNumberEntered == true)
    {
       MessageBox.Show("Please enter number only..."); 
       e.Handled = true;
    }
}

来源是http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress(v=VS.90).aspx

答案 8 :(得分:-2)

我认为它会对你有所帮助

<script type="text/javascript">
function isNumberKey(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 32 && (charCode < 48 || charCode > 57) && (charCode != 45) && (charCode != 43) && (charCode != 40) && (charCode != 41))
        return false;

    return true;
}

答案 9 :(得分:-3)

try
{
    int temp=Convert.ToInt32(TextBox1.Text);
}
catch(Exception h)
{
    MessageBox.Show("Please provide number only");
}