Проверка текстового поля в C # должна принимать только целочисленные значения, но допускает и буквы - PullRequest
0 голосов
/ 03 апреля 2010
if (textBox1.Text != "")  // this forces user to enter something
{
  // next line is supposed to allow only 0-9 to be entered but should block all...
  // ...characters and should block a backspace and a decimal point from being entered....
  // ...but it is also allowing characters to be typed in textBox1
  if(!IsNumberInRange(KeyCode,48,57) && KeyCode!=8 && KeyCode!=46)  // 46 is a "."
  {  
     e.Handled=true;
  }
  else 
  {
     e.Handled=false;
  }  

  if (KeyCode == 13) // enter key
  {  
    TBI1 = System.Convert.ToInt32(var1);   // converts to an int
    Console.WriteLine("TBI1 (var1 INT)= {0}", var1);
    Console.WriteLine("TBI1= {0}", TBI1);
  } 

  if (KeyCode == 46)
  {
    MessageBox.Show("Only digits...no dots please!"); 
    e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar); 
  }
}
else
{
   Console.WriteLine("Cannot be empty!");
}

// If I remove the outer if statement and skip checking for an empty string, then
// it prevents letters from being entered in the textbox. I need to do both, prevent an 
// empty textbox AND prevent letters from being entered.
// thanks, Sonny5

Ответы [ 4 ]

2 голосов
/ 03 апреля 2010

Вы не указали, где работает этот код, но я предполагаю, что он запускается при нажатии клавиши. Поскольку ключ «вниз» получен до обработки символа и обновления свойства Text, проверка на .Text == "" предотвратит продолжение проверки, по крайней мере для первого символа.

Вы должны переместить проверку на пустое значение в событие, отличное от проверки для нажатой клавиши.

1 голос
/ 03 апреля 2010

Я думаю, вы могли бы использовать функцию IsDigit .

Что-то в этом роде:

string textBoxText = "12kj3";

if (!textBoxText.Equals(String.Empty))  // this forces user to enter something
{
    foreach (char c in textBoxText.ToArray())
    {
        if (!Char.IsDigit(c))
        {
            //return false;
        }
    }

    //return true;
}
else
{
    Console.WriteLine("Cannot be empty!");
}

Надеюсь, вы поняли идею.

0 голосов
/ 16 июля 2012
bool bV=false;
    private void textBox1_Validated(object sender, EventArgs e)
    {
        TextBox textBoxText = sender as TextBox;

        if (!textBoxText.Equals(String.Empty))  
        {
            foreach (char c in textBoxText.Text.ToArray())
            {
                if (!Char.IsDigit(c))
                {
                    if (!bV)
                    {
                        MessageBox.Show("Input value not valid plase Insert Integer Value");
                        bV = true;
                        textBox1.Text = String.Empty;
                        break;
                    }
                }
            }
        }
    }

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        bV = false;
    }
0 голосов
/ 03 апреля 2010

Вы можете использовать следующий RegEx, чтобы проверить, что это число "^ \ d + $" и обязательно.

...