繁体   English   中英

文本框验证是否允许一个“。 ”值c#

[英]textbox validation for allow one “ . ” value c#

我希望文本框验证仅允许一个. 值和唯一数字。 表示我的文本框值应仅包含数字和一个. 值。 值应类似于123.50。 我正在使用代码在值的末尾添加.oo.50值。 我的代码是

double x;
double.TryParse(tb.Text, out x);
tb.Text = x.ToString(".00");

它从键盘上取走了所有键,但是我只想取一个数字和一个. 值。

为您的文本框添加一个Control.KeyPress事件处理程序。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar))  //bypass control keys
    {
        int dotIndex = textBox1.Text.IndexOf('.');
        if (char.IsDigit(e.KeyChar))     //ensure it's a digit
        {   //we cannot accept another digit if
            if (dotIndex != -1 &&  //there is already a dot and
                //dot is to the left from the cursor position and
                dotIndex < textBox1.SelectionStart &&
                //there're already 2 symbols to the right from the dot
                textBox1.Text.Substring(dotIndex + 1).Length >= 2)
            {
                e.Handled = true;
            }
        }
        else //we cannot accept this char if
            e.Handled = e.KeyChar != '.' || //it's not a dot or
                        //there is already a dot in the text or
                        dotIndex != -1 ||   
                        //text is empty or
                        textBox1.Text.Length == 0 || 
                        //there are more than 2 symbols from cursor position
                        //to the end of the text
                        textBox1.SelectionStart + 2 < textBox1.Text.Length;
    }
}

您可以通过设计器或在构造函数中进行如下操作:

public Form1()
{
    InitializeComponent();
    //..other initialization
    textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
}

我还添加了几项检查,以确保您不仅可以在文本末尾插入数字,而且可以在任何位置插入数字。 同样带点。 它控制您在点右边的位数不超过2位。 我使用了TextBox.SelectionStart属性来获取光标在文本框中的位置。 检查此线程以获取有关以下内容的更多信息: 如何在文本框中找到光标的位置?

试试这个

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar)
               && !char.IsDigit(e.KeyChar)
               && e.KeyChar != '.')
            e.Handled = true;

        // only allow one decimal point
        if (e.KeyChar == '.'
            && textBox1.Text.IndexOf('.') > -1)
            e.Handled = true;
    }

简单地在textBox的keyPress事件中,您可以执行此操作...

        e.Handled = !char.IsDigit(e.KeyChar)&&(e.KeyChar != '.') && !char.IsControl(e.KeyChar);
        if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
        {
            e.Handled = true;
        }

尝试使用此代码,然后替换您想要的输入类型'validinpu'字符串。

try
{
    short charCode = (short)Strings.Asc(e.KeyChar);
    string validinput = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 .";
    if (Strings.InStr(validamt, Conversions.ToString(Strings.Chr(charCode)), Microsoft.VisualBasic.CompareMethod.Binary) == 0)
    {
        charCode = 0;
    }
    if (charCode == 0)
    {
        e.Handled = true;
    }
}

另一个例子 ,

 private void txtPrice_KeyPress(object sender, KeyPressEventArgs e)
    {
         // To disallow typing in the beginning writing
        if (txtPrice.Text.Length == 0)
        {
            if (e.KeyChar == '.')
            {
                e.Handled = true;
            }
        }
        if (!char.IsDigit(e.KeyChar) && e.KeyChar != 8 && e.KeyChar != 46)
        {
            e.Handled = true;
        }
        if (e.KeyChar == '.' && txtPrice.Text.IndexOf('.') > -1)
        {
            e.Handled = true;
        }
    }

也试试这个短的

e.Handled = (!(e.KeyChar == (char)Keys.Back || e.KeyChar == '.')); //allow  dot and Backspace
e.Handled = (e.KeyChar == '.' && TextBox1.Text.Contains(".")); //allow only one dot

这个例子只允许一个退格键

 if (textBox.Text!="")
        {
            string txt = textBox.Text;
            if (e.KeyChar.ToString().Any(Char.IsNumber) || e.KeyChar == '.')
            {
                textBox.Text = rate;
            }
            else
            {
                MessageBox.Show("Number Only", "Warning");
                textBox.Text = "";
            }
        }

我测试过的代码

if(e.KeyChar.Equals('\b'))
 {
  e.Handled = false;
 }
else
 if (!char.IsControl(e.KeyChar)
           && !char.IsDigit(e.KeyChar)
           && e.KeyChar != '.')
  {
        e.Handled = true;
  }
 else
    // only allow one decimal point
    if (e.KeyChar == '.'
        && textBox1.Text.IndexOf('.') > -1)
  {        
    e.Handled = true;  
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM