2013-03-26 83 views

回答

1

THX给大家,但我做了简单的东西.. 希望帮助..

声明列表:

 List<string> list = new List<string>(); 

在主窗口中:

 public MainWindow() { 
     list.Clear(); 

     foreach (String str in lb1.Items) 
     { 
      list.Add(str); 
     } 
    } 

在框TextChanged事件:

 public void t1_TextChanged(object sender, TextChangedEventArgs e) 
{ 
     if (String.IsNullOrEmpty(t1.Text.Trim()) == false) 
     { 
      lb1.Items.Clear(); 
      foreach (string str in list) 
      { 
       if (str.StartsWith(t1.Text.Trim())) 

       { 
        lb1.Items.Add(str); 
       } 
      } 
     } 

     else if(t1.Text.Trim() == "") 
     { 
      lb1.Items.Clear(); 

      foreach (string str in list) 
       { 
        lb1.Items.Add(str); 
       } 
      }       
     }     
+0

请不要这样与布尔值...请。 if(String.IsNullOrEmpty(t1.Text.Trim())== false)...只要放一个!否定。如果if(!String.IsNullOrEmpty(t1.Text.Trim()){}。与字符串比较相同... else if(t1.Text.Trim()==“”).... == string.Emtpy – Patrick 2016-03-19 21:12:25

+0

是的,旧的线程,但我在谷歌中发现它,以便其他人:我**强烈建议使用ListBox的数据源来代替它。也就是说,为它的每一个项目做一个“主列表”,这是你的'list',现在创建第二个'FilteredList',并将匹配项复制到该列表中。在编辑器中,将ListBox绑定到FilteredList。这比**不断重置项目快得多 - 约15次数在我的测试中。 – 2016-09-19 14:55:38

1

这取决于您的实施。你是否遵循MVVM模式?

如果是,那么你可以过滤你的文本框设置事件的列表框。在setter中,您可以更改列表框的内容。

<TextBox Text="{Binding SearchText}" /> 
private string _searchText; 
public string SearchText 
{ 
    get { return _searchText; } 
    set 
    { 
     _searchText = value; 
     // Change contents of list box. 
    } 
} 

如果您没有关注MVVM,那么您需要在文本框中添加更改事件处理程序。选择TextBox并在属性窗口中检查它的事件。其中有TextChanged事件。添加该事件。无论何时改变文本框文本,这都会给你一个功能。在该功能中,您可以实现用于过滤列表框的逻辑。

+0

是的我已经使用TextChanged事件。 thx – 2013-03-27 04:22:18

+0

然后将此标记为答案,谢谢, – 2013-03-27 04:54:26