Обработка ввод в TextBox в реальном времени C#
В TextBox вводим некоторый текст, нужно чтобы текст вводимый пользователем обрабатывался в реальном времени...(и если встречается определенное слово, то вызывается определённое событие)
Например: введёная строка - "ыавпвСобытие1впыпсобытие2ывпрыр" пока это всё вводилось, должно было произойти 2 события(1 и 2)..Через что можно реализовать такую возможность? У TextBox'а есть событие TextChange, но как-то не допонял как в нём это реализовать..если кто сталкивался, подскажите.
|
реализуется в TextChange с помощью if или case
сначала нужно распарсить строку
|
Цитата:
Цитата ferget
реализуется в TextChange с помощью if или case »
|
Можно привязать к KeyPress - будет даже быстрее. Потом сравнить уже введенное значение с нужным шаблоном.
|
а можно про 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="";
}
|
Пример - есть 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") { ... }
ЗЫ. Опередили....
|
ну с TextChange стало понятно как вывел её значения в ListBox..каждый раз + 1 символ и можно проверить строку на наличие искомого слова...подозревал, что с KeyPress также, просто было интересно как) в любом случае, всем спасибо за помощь)
|
Цитата:
Цитата 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;}
}
»
|
возник вопрос, до первого ввода "Привет" всё работает, после выводится только первое условие..как сделать этот цикл "многоразовым"?)
|
Не понятно, подробнее объясните
|
вводим строку: выпрПривет, и после того как ввели Привет, на все последующие символы выводится "Что???", как сделать чтобы можно было ввести например 2 раза Привет. Например: ывппПриветвраврПривет и вывелось: Что??? Что???, ну или если заменить label1.Text="" на label1.Text="!":!!!!Что???!!!!!Что???
Если сравнивать строку через Regex, происходит тоже самое, скорей всего нужно как-то вернуться к проверке слова, чтобы не зацикливаться на выбранном if
|
чтобы текст выводился несколько раз
Код:
label1.Text +="Что???";
но тогда надо, сделать проверку на удаление букв из TextBox
|
а удалять буквы не надо...т.е ввели строку: ывпвыпрПриветвпвапрПривет и она должна вывести два раза "Что???" (после первого ввода Привет и после второго), а сейчас после первого упоминания в строке Привет, всё, что выводится после не учитывается, и на каждый символ выводится "Что???"..а по идее надо выводить пробелы и когда встретится Привет второй раз, опять вывести "Что???"
|
Цитата:
Цитата 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;// выводим строку
Должно работать.
|
Цитата:
Цитата 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;// выводим строку »
|
не работает..(ошибки закоментил) и через регулярные не обязательно, тут уже лишь бы работало))
|
Исправил код. Приношу свои извинения за предыдущий код...
Код:
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;// выводим строку
|
Огромное спасибо, работает. Если сейчас соображу как применить к моему заданию вообще не плохо будет :)
|
Время: 18:15.
© OSzone.net 2001-