проверка текстового поля в приложениях формы Windows - PullRequest
0 голосов
/ 13 мая 2011

Мой сценарий:

Запрещено использование пробелов в начальной позиции текстового поля после ввода одного или нескольких символов. В текстовом поле допускаются пробелы

Ниже не применимо к моему сценарию.

  1. private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.Handled = (e.KeyChar == (char)Keys.Space))
        {
            MessageBox.Show("Spaces are not allowed");
        }
    }
    
  2. textBox1.Text.TrimStart()
    

Ответы [ 7 ]

1 голос
/ 13 мая 2011
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) \
{ 
if(textBox1.Text.Length == 0)
    {
    if (e.Handled = (e.KeyChar == (char)Keys.Space)) 
        { 
        MessageBox.Show("Spaces are not allowed at start"); 
        } 
    }
}
1 голос
/ 13 мая 2011

Я считаю, что ответ lazyDBA является правильным для ваших требований, поэтому с окном сообщения что-то вроде:

if (textBox1.Text.Length == 0)
{
   if (e.Handler = (e.KeyChar == (char)Keys.Space))
   {
       MessageBox.Show("space not allowed!");
   }  
}`
0 голосов
/ 13 мая 2011

Вы должны использовать регулярное выражение

        string strRegex = @"^([\w]+.*)$";
        string strTargetString =  textBox1.Text;

        if (!Regex.IsMatch(strTargetString, strRegex))
        {
            // show error that spase not allow at the bigin of string
        }
0 голосов
/ 13 мая 2011

Как вы не описали кратко, и если я не ошибаюсь, вы хотели урезать пробелы в начале, верно?

тогда мой ответ таков: вы можете справиться с этим множеством способов, и один из возможных способов - справиться с этим следующим образом. Некоторый пример кода, который я написал здесь ниже, вы можете проверить, он отлично работает в моем примере приложения:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((textBox1.SelectionStart == 0) && (e.KeyChar == (char)Keys.Space))
            {
                e.Handled = true;
            }
        }

private void textBox1_TextChanged(object sender, EventArgs e)
    {
           //Store the back up of Current Cursor Possition.
           int cusorpos = textBox1.SelectionStart;

           if (false == string.IsNullOrEmpty(textBox1.Text))
           {
                 if (textBox1.Text[0] == ' ')
                 {
                       //Trim Spaces at beginning.
                       textBox1.Text = textBox1.Text.TrimStart(' ');

                       //Set the Cursor position to current Position. 
                       textBox1.SelectionStart = cusorpos;
                  }
           }
    }

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

0 голосов
/ 13 мая 2011

Вы говорите, что вариант номер один не применим.Как насчет версии опции номер один, которая использует то же событие и аналогичный код, но внутри второго оператора IF.Это препятствует работе пробелов, если в текстовом поле нет других символов.

if (textBox1.Text.Length == 0)
{
 e.Handled = (e.KeyChar == (char)Keys.Space)) 
}
0 голосов
/ 13 мая 2011

Попробуйте это в KeyPress событии

if ((sender as TextBox).Text.Length <= 0)
    e.Handled = (e.KeyChar == (char)Keys.Space);
else
    e.Handled = false;

В случае, если вам нужно заставить его работать, а также в случае, если пользователь после ввода некоторого текста переместится в начало поля TextBox и попытается ввести пробел, тогда это тоже отключит

void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
     if ((sender as TextBox).SelectionStart == 0)
          e.Handled = (e.KeyChar == (char)Keys.Space);
     else
          e.Handled = false;
}
0 голосов
/ 13 мая 2011

Попробуйте

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)         
 {             
     if (e.Handled = (e.KeyChar == (char)Keys.Space))             
     {                 
        if(((TextBox)sender).Text.Replace(" ","") == "")
        {
             MessageBox.Show("Spaces are not allowed");  
             ((TextBox)sender).Text = string.Empty;
        }           
     }          
 } 
...