Ankush Soni Ответов: 3

Добавление подстроки из текстового поля в список


У меня есть текстовое поле, в которое пользователь вводит какую-то строку. Теперь я извлекаю подстроку из основной строки и отображаю ее в списке.
Например:
Если пользователь вводит: выберите A1, A2,A3 из таблицы 1
тогда мне нужны A1, A2 и A3 как отдельные элементы моего списка.

Я могу сделать это легко, однако есть небольшая проблема, которая возникает.
Как только пользователь заканчивает вводить слово "от", значения добавляются в список, и если пользователь вводит что-либо после "ОТ"(даже пробел), значения добавляются снова.
Мне нужны эти ценности только один раз. Что я упускаю? Пожалуйста помочь

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

private void textBox1_TextChanged(object sender, EventArgs e)
        {
                     
            string substr;
            string str = textBox1.Text.ToString();
            Match m = Regex.Match(str, @"(?<=.\s+).+?(?=\s+from)", RegexOptions.IgnoreCase);
            try
            {
                if (m.Success)
                {
                    substr = m.Value;
                    string[] sub = substr.Split(',');
                    foreach (string x in sub)
                    {
                        listBox1.Items.Add(x);
                    }
                }
            finally
            {
                listBox1.EndUpdate();
            }

        }

3 Ответов

Рейтинг:
4

Patrice T

А как насчет удаления старого listBox1 элементы перед добавлением новых ?

substr = m.Value;
string[] sub = substr.Split(',');
// delete old items here
foreach (string x in sub)
{
    listBox1.Items.Add(x);
}


Рейтинг:
13

OriginalGriff

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

SELECT A1, B2, A3 FROM TABLE1
и тогда я понимаю, что это должно было быть "А2", а не В2, поэтому я возвращаюсь назад и изменяю его, редактируя существующий:
SELECT A1, A2, A3 FROM TABLE1
Какие значения должны быть в вашем списке?
A1, A2, and A3

Или
A1, A2, B2, and A3

Или
A1, B2, A3, A1, A2, and A3

А что, если я вернусь и поменяю их все на "вторую линию"? Должны ли быть удалены предыдущие?

Я не знаю, что такое ваше приложение или что именно оно пытается сделать , но оно должно знать, что пользователи совершают ошибки, и обычно оно не должно добавлять что-то, если пользователь не указал, что они правильны позитивным действием.
Если вы хотите добавить их "на лету", то вам нужно сохранить список" добавленных элементов " и удалить их все, прежде чем добавлять больше, пока пользователь не покажет, что он счастлив.


Ankush Soni

Спасибо вам за это замечательное объяснение. У меня есть моя ошибка. :)

Рейтинг:
0

Karthik_Mahalingam

добавить это

if (!listBox1.Items.Contains(x))
listBox1.Items.Add(x);


или

private void textBox1_TextChanged_2(object sender, EventArgs e)
     {
         listBox1.Items.Clear();
.
.
.


Patrice T

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

Karthik_Mahalingam

да ты обряд

Ankush Soni

Спасибо. Работал:)

Karthik_Mahalingam

добро пожаловать :)