Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#仅数字文本框控件_C#_Textbox_.net 3.5 - Fatal编程技术网

C#仅数字文本框控件

C#仅数字文本框控件,c#,textbox,.net-3.5,C#,Textbox,.net 3.5,我正在使用C#.NET3.5,我的项目中有一个问题。在C#Windows应用程序中,我想制作一个文本框,只接受数字。如果用户尝试输入字符,则消息应显示为“请仅输入数字”,并且在另一个文本框中,它必须接受有效的电子邮件id消息,当消息无效时,应显示该消息。它必须显示无效的用户id。您可能需要在KeyPress(object,KeyPressEventArgs)事件中尝试int.TryParse(string,out int),以检查数值。对于另一个问题,您可以使用正则表达式。我建议您使用Maske

我正在使用C#.NET3.5,我的项目中有一个问题。在C#Windows应用程序中,我想制作一个
文本框
,只接受数字。如果用户尝试输入字符,则消息应显示为“请仅输入数字”,并且在另一个文本框中,它必须接受有效的
电子邮件id
消息,当消息无效时,应显示该消息。它必须显示无效的用户id。

您可能需要在
KeyPress(object,KeyPressEventArgs)
事件中尝试
int.TryParse(string,out int)
,以检查数值。对于另一个问题,您可以使用正则表达式。

我建议您使用MaskedTextBox:

您可以通过文本框的KeyPress事件上的e.keychar检查Ascii值

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

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

从C#3.5开始,我假设您使用的是WPF

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

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

在MSDN上查找绑定。

尝试此代码

// 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;
    }
}
//用于确定何时输入数字以外的字符的布尔标志。
私有bool nonnumberrentered=假;
//处理KeyDown事件以确定输入控件的字符类型。
私有void textBox1\u KeyDown(对象发送方,KeyEventArgs e)
{
//将标志初始化为false。
非numberrentered=false;
//确定击键是否为键盘顶部的数字。
如果(e.KeyCodeKeys.D9)
{
//确定击键是否为键盘上的数字。
if(e.KeyCodeKeys.NumPad9)
{
//确定击键是否为退格。
if(e.KeyCode!=Keys.Back)
{
//按下了非数字按键。
//将标志设置为true并在按键事件中计算。
非numberrentered=真;
}
}
}
}
私有无效文本框1\u按键(对象发送器,按键事件参数e)
{
if(非numberEntered==true)
{
MessageBox.Show(“请只输入数字…”);
e、 已处理=正确;
}
}

源代码是

使用以下代码:

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

我使用了@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()

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

我想这会对你有帮助

<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;
}

函数isNumberKey(evt){
var charCode=(evt.which)?evt.which:event.keyCode
如果(charCode>32&(charCode<48|charCode>57)&(charCode!=45)&(charCode!=43)&(charCode!=40)&(charCode!=41))
返回false;
返回true;
}


如果我是邪恶的测试者,我会粘贴一些文本…光标键和删除键呢?如果OP使用Windows窗体,他可以使用Daniel的解决方案。与此相关的一个错误是:尝试按“SHIFT+1”,看看会发生什么。您尝试给OP什么代码?没有意义这不会阻止用户将任何文本粘贴到文本框中。
<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;
}