Textbox KeyPress事件?

时间:2014-09-18 12:27:56

标签: c# winforms textbox keypress

我有文本框只允许小数和' +' 它只允许1个十进制" 12.332"我需要在' +'之前允许1位小数。 ' +'之后的1位小数例子我有12.43 + 12.23我不能输入12(。)因为我只允许1个十进制我使用Split方法获得前后2个部分

这是我的代码

// checks to make sure only 1 decimal is allowed
if (e.KeyChar == 46)
{
    if ((sender as TextBox).Text.IndexOf(e.KeyChar) != -1)
        e.Handled = true;
}

这是我的方法

if(textBox1.Text.Contains('+')==true )
{
    string Value = textBox1.Text;
    string[] tmp = Value.Split('+');
    string FirstValu = tmp[1];
    string SecValu = tmp[0];
}

如何使用带事件的方法在' +'

之后允许另一个小数位

2 个答案:

答案 0 :(得分:1)

我会说在评论中使用两个文本框就像有人说的那样但是如果你想要顽固在这里是一个在文本框中文本更改时调用的事件内运行的函数。

void textbox_textChanged(object sender, EventArgs e)
    {
        string text = textBox.Text;
        int pointCounter = 0;
        int addCounter =0
        string temp = "";
        string numbers = "0123456789";
        for(int i =0;i<text.Length;i++)
        {
            bool found = false;
            for(int j = 0;j<numbers.Length;j++)
            {
                if(text[i]==numbers[j])
                {
                    temp+=text[i];
                    found = true;
                    break;
                }
            }
            if(!found)
            {
                if('.' == text[i])
                {
                    if(pointCounter<1)
                    {
                        pointCounter++;
                        temp+=text[i];
                    }
                }else
                    if('+' == text[i])
                    {
                        if(addCounter<1)
                        {
                            pointCounter=0;
                            addCounter++;
                            temp+=text[i];
                        }
                    }
            }
        }
        textBox.text = temp;

    }

答案 1 :(得分:0)

我建议使用正则表达式来验证您的文本框。我还建议使用文本框验证事件比使用Leave事件更好。以下是在Validating事件中使用正则表达式的示例:

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    TextBox tbox = (TextBox)sender;

    string testPattern = @"^[+-]?[0-9]*\.?[0-9]+ *[+-]? *[0-9]*\.?[0-9]+$";
    Regex regex = new Regex(testPattern);

    bool isTextOk = regex.Match(tbox.Text).Success;
    if (!isTextOk)
    {
        MessageBox.Show("Error, please check your input.");
        e.Cancel = true;
    }
}

您将在System.Text.RegularExpressions命名空间中找到Regex类。另外,请确保您的文本框的CausesValidation属性设置为true。

作为替代方案,您可能还希望使用MaskedTextBox Class