#c# #textbox #desktop-application #textchanged
#c# #текстовое поле #рабочий стол-приложение #текст изменен
Вопрос:
Я новичок в C # и пытался узнать, как использовать измененный текст, чтобы пользователям не приходилось вручную нажимать кнопку. Но я могу заставить свое приложение работать с событием TextChanged. Я создал тестовую программу, чтобы проверить, работает ли она, и да, это действительно так. Вот нерабочий код, с которым мне нужна помощь, если вам нужно больше, пожалуйста, дайте мне знать.
Код в форме:
private void custFNameTxt_TextChanged(object sender, EventArgs e)
{
searchFirstName(custFNameTxt, customers);//search first name make searched list
Console.Write("working!!!!!!!!!!!!!!!!!!!!!!!"); // for testing
}
Код был добавлен в конструктор, когда я добавил событие:
//
// custFNameTxt
//
this.custFNameTxt.Location = new System.Drawing.Point(98, 45);
this.custFNameTxt.MaxLength = 12;
this.custFNameTxt.Name = "custFNameTxt";
this.custFNameTxt.Size = new System.Drawing.Size(171, 20);
this.custFNameTxt.TabIndex = 1;
this.custFNameTxt.TextChanged = new System.EventHandler(this.custFNameTxt_TextChanged);
Я попытался добавить обработчик в форму загрузки (это не заставило его работать):
private void Form1_Load(object sender, EventArgs e)//when form loads do this
{
//set unsername field to be selected on load
usernameTxt.Focus();
custFNameTxt.TextChanged = new EventHandler(custFNameTxt_TextChanged);
}
Вот метод, который он вызывает на всякий случай, если проблема связана с ним, а не с вызовом события:
private void searchFirstName<T>(Control textBox, List<T> list)//method to search customers by first name
{
if (list.GetType() == typeof(List<Customer>))
{
searchForThis = (textBox as TextBox).Text.ToUpper().Trim().ToString();
for (int i = 0; i < customers.Count -1; i )
{
searchThis = customers[i].F_name.ToUpper();
if(searchThis.Substring(0, searchForThis.Length) == searchForThis)
{
searched.Add(customers[i]);
}
}//end for loop
}//end if type of customer
Комментарии:
1. не могли бы вы уточнить, какая часть точно работает, а какая нет? Запуск события или обработка
searchFirstName<T>
?2. Если вы не создали класс
T
, скорее всего, это те части. Какой тип спискаList<T>
?3. Основываясь на вашем названии, я интерпретирую, что вы считаете, что событие не запускается. Вы выводите это из-за того, что не видите распечатку в консоли, или точка останова в обработчике событий не достигнута? Если первое, я бы предположил, что по какой-то причине вы выходите из строя в
searchFirstName
методе.4. Да, событие textchnaged, похоже, не запускается, я действительно видел, что консоль не выводит «работает !!!!!» текст. Итак, почему метод не работает в событии textchnaged?
Ответ №1:
Я слишком быстро обратился за помощью, похоже, у меня есть куча другого необходимого кода при нажатии кнопки, который был необходим в тексте, измененном для правильной работы. Спасибо всем за помощь, я просто не мог понять, в чем проблема, пока не получил совет.
if (!string.IsNullOrEmpty(custFNameTxt.Text) amp;amp; string.IsNullOrEmpty(custIdTxt.Text) ||
!string.IsNullOrEmpty(custLNameTxt.Text) amp;amp; !string.IsNullOrEmpty(custFNameTxt.Text) ||
string.IsNullOrEmpty(custLNameTxt.Text) amp;amp; !string.IsNullOrEmpty(custFNameTxt.Text))
{
searchFirstName(custFNameTxt, customers);//search first name make searched list
custSearchList.Clear();
foreach (Customer custs in searched)
{
altRowColor(searched, custSearchList);//iterate throught list alt row color
}
altCust = 0;//reset altCust to avoid errors
if (!string.IsNullOrEmpty(custFNameTxt.Text) amp;amp; !string.IsNullOrEmpty(custLNameTxt.Text))//Narrow down the search
{
narrowByLast();//narrow method
custSearchList.Clear();//clear text
foreach (Customer custs in searched)
{
altRowColor(searched, custSearchList);//iterate throught list alt row color
}
altCust = 0;//reset altCust to avoid errors
}
}