2016-12-05 4 views
0

Работа с приложением, которое ищет элементы в ListView. Я добавил логику бит логики для этого, чтобы выглядеть лучше. Сначала я добавил логику в List View Columns - размер столбца соответствует содержимому. Затем поиск по ID - который работает. Моя проблема и вопрос в том, связаны ли эти два события друг от друга? значит, в то время как я пытаюсь выполнить поиск, он попадает в инфинитивную петлю с изменением размера и делает «крушение». Мой код, который зависит от того, что есть:Изменяет ли размер событие с поисковым событием независимо? ListView + TextBox C#

// Изменение размера

void DeviceListView_Resize(object sender, EventArgs e) 
     { 
      controller.ResizeColumns((ListView)sender); 
     } 

public void ResizeColumns(ListView lv) 
     { 
      foreach (ColumnHeader column in lv.Columns) 
      { 
       column.Width = -2; 
      } 
     } 

// Поиск

void SearchBox_TextChanged(object sender, EventArgs e) 
     { 
      controller.Search(); 
     } 

public void Search() 
     { 
      myListView.Items.Clear(); 
      myListView.Items.AddRange(myList.Where(i => string.IsNullOrEmpty(searchBox.Text) || searchBox.Text.Contains("Search") || i.esn.Contains(searchBox.Text)) 
      .Select(c => new ListViewItem (
       new string[] {c.ID, c.Name, (...), c.Smth} 
      )).ToArray()); 
     } 

// Поиск Box держатель место

void SearchBox_TextChanged(object sender, EventArgs e) 
     { 
      controller.Search(); 
     } 

     void TextGotFocus(object sender, EventArgs e) 
     { 
      TextBox tb = (TextBox)sender; 
      if(tb.Text == "Search...") 
      { 
       tb.Text = ""; 
       tb.ForeColor = Color.Black; 
      } 
     } 

     void TextLostFocus(object sender, EventArgs e) 
     { 
      TextBox tb = (TextBox)sender; 
      if(tb.Text == "") 
      { 
       tb.Text = "Search..."; 
       tb.ForeColor = Color.LightGray; 
      } 
     } 

Все приложение уже есть много строк кода, выложили только это. КПП. Мои подозрения находятся в методе Search в строке, которая содержит: myListView.Items.Clear(); Если я не очищаю его, он ничего не сделает, но у Search также не будет использования. Спасибо заранее!

ответ

0

Да, они независимы друг от друга, так или иначе - я не знаю :) Если решить мою проблему, которая выглядит следующим образом:

глобальная переменная:

bool resized = false; 

if (!resized) 
{ 
      foreach (ColumnHeader column in lv.Columns) 
      { 
       column.Width = -2; 
      } 
      resized = true; 
}