Показать полную графическую версию : [решено] Обработка ввод в TextBox в реальном времени C#
SeRgikON
13-10-2011, 16:57
В TextBox вводим некоторый текст, нужно чтобы текст вводимый пользователем обрабатывался в реальном времени...(и если встречается определенное слово, то вызывается определённое событие)
Например: введёная строка - "ыавпвСобытие1впыпсобытие2ывпрыр" пока это всё вводилось, должно было произойти 2 события(1 и 2)..Через что можно реализовать такую возможность? У TextBox'а есть событие TextChange, но как-то не допонял как в нём это реализовать..если кто сталкивался, подскажите.
реализуется в TextChange с помощью if или case
сначала нужно распарсить строку
dmitryst
13-10-2011, 17:56
реализуется в TextChange с помощью if или case »
Можно привязать к KeyPress - будет даже быстрее. Потом сравнить уже введенное значение с нужным шаблоном.
SeRgikON
13-10-2011, 18:07
а можно про KeyPress поподробней?) с примером, если не трудно)
в обоих случаях будет одинаково
пример с псевдопарсингом
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
Пример - есть 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
ну с TextChange стало понятно как вывел её значения в ListBox..каждый раз + 1 символ и можно проверить строку на наличие искомого слова...подозревал, что с KeyPress также, просто было интересно как) в любом случае, всем спасибо за помощь)
SeRgikON
13-10-2011, 19:56
в обоих случаях будет одинаково
пример с псевдопарсингом
Код:
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;}
}
»
возник вопрос, до первого ввода "Привет" всё работает, после выводится только первое условие..как сделать этот цикл "многоразовым"?)
Не понятно, подробнее объясните
SeRgikON
13-10-2011, 20:47
вводим строку: выпрПривет, и после того как ввели Привет, на все последующие символы выводится "Что???", как сделать чтобы можно было ввести например 2 раза Привет. Например: ывппПриветвраврПривет и вывелось: Что??? Что???, ну или если заменить label1.Text="" на label1.Text="!":!!!!Что???!!!!!Что???
Если сравнивать строку через Regex, происходит тоже самое, скорей всего нужно как-то вернуться к проверке слова, чтобы не зацикливаться на выбранном if
чтобы текст выводился несколько раз
label1.Text +="Что???";
но тогда надо, сделать проверку на удаление букв из TextBox
SeRgikON
13-10-2011, 22:07
а удалять буквы не надо...т.е ввели строку: ывпвыпрПриветвпвапрПривет и она должна вывести два раза "Что???" (после первого ввода Привет и после второго), а сейчас после первого упоминания в строке Привет, всё, что выводится после не учитывается, и на каждый символ выводится "Что???"..а по идее надо выводить пробелы и когда встретится Привет второй раз, опять вывести "Что???"
как сделать чтобы можно было ввести например 2 раза Привет. Например: ывппПриветвраврПривет и вывелось: Что??? Что???, »
Если сравнивать строку через 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
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;// выводим строку »
не работает..(ошибки закоментил) и через регулярные не обязательно, тут уже лишь бы работало))
не работает.. »
Исправил код. Приношу свои извинения за предыдущий код...
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
Огромное спасибо, работает. Если сейчас соображу как применить к моему заданию вообще не плохо будет :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.