Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Обработка ввод в TextBox в реальном времени C# (http://forum.oszone.net/showthread.php?t=217884)

SeRgikON 13-10-2011 16:57 1772562

Обработка ввод в TextBox в реальном времени C#
 
В TextBox вводим некоторый текст, нужно чтобы текст вводимый пользователем обрабатывался в реальном времени...(и если встречается определенное слово, то вызывается определённое событие)
Например: введёная строка - "ыавпвСобытие1впыпсобытие2ывпрыр" пока это всё вводилось, должно было произойти 2 события(1 и 2)..Через что можно реализовать такую возможность? У TextBox'а есть событие TextChange, но как-то не допонял как в нём это реализовать..если кто сталкивался, подскажите.

ferget 13-10-2011 17:22 1772581

реализуется в TextChange с помощью if или case
сначала нужно распарсить строку

dmitryst 13-10-2011 17:56 1772603

Цитата:

Цитата ferget
реализуется в TextChange с помощью if или case »

Можно привязать к KeyPress - будет даже быстрее. Потом сравнить уже введенное значение с нужным шаблоном.

SeRgikON 13-10-2011 18:07 1772612

а можно про KeyPress поподробней?) с примером, если не трудно)

ferget 13-10-2011 18:14 1772620

в обоих случаях будет одинаково
пример с псевдопарсингом
Код:


                void TextBox1TextChanged(object sender, EventArgs e)
                {
                       
                        if(ParceText(textBox1.Text)==1)
                        {
                                label1.Text="Что???";
                        }
                        else if(ParceText(textBox1.Text)==2)
                        label1.Text="";
                }
               
                int ParceText(string str)
                {
                        if(str=="Привет")
                                return 1;
                        else{return 2;}
                }
               
                void TextBox2KeyPress(object sender, KeyPressEventArgs e)
                {
                        if(ParceText(textBox2.Text)==1)
                        {
                                label2.Text="Что???";
                        }
                        else if(ParceText(textBox2.Text)==2)
                        label2.Text="";
                }


dmitryst 13-10-2011 18:14 1772621

Пример - есть TextBox по имени textBoxAge. На событие KeyPress вешаем функцию -

Код:

private void textBoxAge_KeyPress(object sender, KeyPressEventArgs e)
        {
          // MessageBox.Show("test");
            if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8) /// Только циферки принимаем )
                    e.Handled = true; // Удаление символа

        }

Данная функция позволяет вводить только цифры (для указания возраста). Вместо фильтрации по сканкоду можно сделать сравнение if (textBoxAge.Text == "bla-bla-bla") { ... }

ЗЫ. Опередили....

SeRgikON 13-10-2011 18:28 1772631

ну с TextChange стало понятно как вывел её значения в ListBox..каждый раз + 1 символ и можно проверить строку на наличие искомого слова...подозревал, что с KeyPress также, просто было интересно как) в любом случае, всем спасибо за помощь)

SeRgikON 13-10-2011 19:56 1772689

Цитата:

Цитата ferget
в обоих случаях будет одинаково
пример с псевдопарсингом
Код:
void TextBox1TextChanged(object sender, EventArgs e)
{
if(ParceText(textBox1.Text)==1)
{
label1.Text="Что???";
}
else if(ParceText(textBox1.Text)==2)
label1.Text="";
}
int ParceText(string str)
{
if(str=="Привет")
return 1;
else{return 2;}
}
»

возник вопрос, до первого ввода "Привет" всё работает, после выводится только первое условие..как сделать этот цикл "многоразовым"?)

ferget 13-10-2011 20:39 1772723

Не понятно, подробнее объясните

SeRgikON 13-10-2011 20:47 1772731

вводим строку: выпрПривет, и после того как ввели Привет, на все последующие символы выводится "Что???", как сделать чтобы можно было ввести например 2 раза Привет. Например: ывппПриветвраврПривет и вывелось: Что??? Что???, ну или если заменить label1.Text="" на label1.Text="!":!!!!Что???!!!!!Что???
Если сравнивать строку через Regex, происходит тоже самое, скорей всего нужно как-то вернуться к проверке слова, чтобы не зацикливаться на выбранном if

ferget 13-10-2011 21:16 1772752

чтобы текст выводился несколько раз
Код:

label1.Text +="Что???";
но тогда надо, сделать проверку на удаление букв из TextBox

SeRgikON 13-10-2011 22:07 1772779

а удалять буквы не надо...т.е ввели строку: ывпвыпрПриветвпвапрПривет и она должна вывести два раза "Что???" (после первого ввода Привет и после второго), а сейчас после первого упоминания в строке Привет, всё, что выводится после не учитывается, и на каждый символ выводится "Что???"..а по идее надо выводить пробелы и когда встретится Привет второй раз, опять вывести "Что???"

LilLoco 13-10-2011 22:16 1772788

Цитата:

Цитата SeRgikON
как сделать чтобы можно было ввести например 2 раза Привет. Например: ывппПриветвраврПривет и вывелось: Что??? Что???, »

Цитата:

Цитата SeRgikON
Если сравнивать строку через Regex »

Раз уж вы используете регулярные выражения, то почему бы не сделать через количество совпадений(для примера слово привет):
Код:

string text = string.Empty;
Regex  r = new Regex();
Match[] m = r.Matches(textBox1.Text, "привет");
for (int i = 0;i<m.Length;i++)// строим строку в зависимости от количества вхождений
{
    text += "Что?";
}
textBox1.Text = text;// выводим строку

Должно работать.

SeRgikON 13-10-2011 22:32 1772795

Цитата:

Цитата LilLoco
string text = string.Empty;
Regex r = new Regex(); //Ошибка 1 "System.Text.RegularExpressions.Regex.Regex()" недоступен из-за его уровня защит
Match[] m = r.Matches(textBox1.Text, "Привет"); Ошибка 2 Доступ к члену "System.Text.RegularExpressions.Regex.Matches(string, string)" через ссылку на экземпляр невозможен; вместо этого уточните его, указав имя типа

for (int i = 0;i<m.Length;i++)// строим строку в зависимости от количества вхождений
{
text += "Что?";
}
textBox1.Text = text;// выводим строку »

не работает..(ошибки закоментил) и через регулярные не обязательно, тут уже лишь бы работало))

LilLoco 13-10-2011 22:47 1772802

Цитата:

Цитата SeRgikON
не работает.. »

Исправил код. Приношу свои извинения за предыдущий код...
Код:

string text = string.Empty;
Regex r = new Regex("привет");
MatchCollection m = r.Matches(textBox1.Text)
for (int i = 0; i < m.Count; i++)// строим строку в зависимости от количества вхождений
{
      text += "Что?";
}
textBox2.Text = text;// выводим строку


SeRgikON 13-10-2011 23:13 1772820

Огромное спасибо, работает. Если сейчас соображу как применить к моему заданию вообще не плохо будет :)


Время: 18:15.

Время: 18:15.
© OSzone.net 2001-