ahmed_sa Ответов: 1

Как ошибка исключение startindex не может быть меньше нуля I...


У меня есть textbox1 и мне нужно разрешить этому textbox1 принимать только арабские символы

ни одна цифра не принимается также ни один английский символ не принимается

так что я пишу в событии key_up следующее

private void textBox1_KeyUp(object sender, KeyEventArgs e)  
        {  
            if (textBox1.Text.Any(char.IsDigit))  
            {  
                  
                textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);  
                textBox1.Focus();  
            }  
  
            QrClasses qr = new MatrixBarcode.QrClasses();  
            bool b = qr.HasArabicCharacters(textBox1.Text);  
  
            if (b == false)  
            {  
                  
                    textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);  
                  
              
                
                textBox1.Focus();  
  
            }  
            else  
            {  
                textBox1.Enabled = true;  
            }  
        }

public bool HasArabicCharacters(string text)  
  
        {  
  
            Regex regex = new Regex(  
  
                "[\u0600-\u06ff]|[\u0750-\u077f]|[\ufb50-\ufc3f]|[\ufe70-\ufefc]");  
  
            return regex.IsMatch(text);  
        }

Я получаю исключение ошибки startindex не может быть меньше нуля (индекс вне диапазона)

в очереди

текстовое поле textbox1.Текст = элемент textbox1.Текст.Удалить(элемент textbox1.Текст.Длина - 1);
при попытке ввести арабские буквы

так вот как решить эту проблему

Что я уже пробовал:

Исключение ошибки startindex не может быть меньше нуля

CHill60

Итак, когда вы отлаживаете этот код и изучаете содержимое textBox1, ведет ли код себя так, как вы ожидали бы, учитывая данные?
Взгляните на Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

1 Ответов

Рейтинг:
0

Patrice T

Подумайте о своем коде, что происходит в вашем коде, когда текстовое поле пусто (длина=0)

bool b = qr.HasArabicCharacters(textBox1.Text);
if (b == false)
{
    textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
    textBox1.Focus();
}


Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Он позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

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


CHill60

5 б ... пошел выпить чашечку чая и пропустил твое решение ... тем не менее, я чувствую себя хорошо, что мы пошли на одну и ту же статью CP :-)

Patrice T

Спасибо.