2009-03-29 9 views
2

HIListBoxで検索

私はリストボックスで検索するテキストボックスを配置しようとしています。 私はテキストボックスがあります。このコードの検索テキスト:

private void SearchText_TextChanged(object sender, EventArgs e) 
{ 
    int i = listBox3.FindString(SearchText.Text); 
    listBox3.SelectedIndex = i; 
} 

と、私はこのコード

List<string> str = GetListOfFiles(@"D:\\Music\\massive attack - collected");   
listBox3.DataSource = str; 
listBox3.DisplayMember = "str"; 

とのSelectedIndexChangedに持って負荷にリストボックス:私は書き留めた場合

private void listBox3_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    player1.URL = listBox3.SelectedItem.ToString(); // HERE APPEAR THE ERROR "Object reference not set to an instance of an object." 

    // provaTxt.Text = listBox3.SelectedValue.ToString(); 
} 

をSeachTextで曲を検索すると、ListBoxのselectedIndexChanged行にエラーが表示されます(「オブジェクトリファレンスはオブジェクトのインスタンスに設定されていません」)。 私のケースとしてlistBoxで見つかるもう一つの方法をご存知ですか? あなたのシェアをありがとう。 ニースよろしくお願いします。

+0

全例が追加。私はあなたのコメントからすべてを表示していると思います... –

答えて

2

商品が見つかりませんでしたので、SelectedItemはnullでした。試してみてください:

私はこれがnullの場合を扱うと考えています(代わりに、最初にヌルをテストしてください)。

私はまた、基本的なリストで見えるように誘惑されるだろう:

例えば
List<string> items = (List<string>)listbox3.DataSource; 
listbox3.SelectedIndex = items.FindIndex(s => s.StartsWith(searchFor)); 

using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 
class MyForm : Form 
{ 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.Run(new MyForm()); 
    } 

    ListBox listbox; 
    TextBox textbox; 
    CheckBox multi; 
    public MyForm() 
    { 
     textbox = new TextBox { Dock = DockStyle.Top }; 
     List<string> strings = new List<string> { "abc", "abd", "abed", "ab" }; 
     listbox = new ListBox { Dock = DockStyle.Fill, DataSource = strings }; 
     textbox.KeyDown += textbox_KeyDown; 
     Controls.Add(listbox); 
     Controls.Add(textbox); 
     listbox.SelectedIndexChanged += listbox_SelectedIndexChanged; 
     listbox.SelectionMode = SelectionMode.MultiExtended; 
     multi = new CheckBox { Text = "select multiple", Dock = DockStyle.Bottom }; 
     Controls.Add(multi); 
    } 

    void listbox_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Text = Convert.ToString(listbox.SelectedItem); 
    } 

    void textbox_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Return) 
     { 
      string searchFor = textbox.Text; 
      List<string> strings = (List<string>)listbox.DataSource; 
      if (multi.Checked) 
      { 
       for (int i = 0; i < strings.Count; i++) 
       { 
        listbox.SetSelected(i, strings[i].Contains(searchFor)); 
       } 
      } 
      else 
      { 
       listbox.ClearSelected(); 
       listbox.SelectedIndex = strings.FindIndex(
        s => s.Contains(searchFor)); 
      } 
     } 
    } 
} 
+0

を使用してヌルまたは空の文字列を確認できます。if(!String.IsNullOrEmpty(someString)) – DOK

+0

@DOK:はい、SelectedItemは文字列ではなくオブジェクトです。 –

+0

こんにちはマーク、 私はあなたの助けを借りて私はあなたのアドバイスとして変更私はSearchTextにエラーが表示されますが、最後のものは何も検索することはできません変更.iも変更されたStartWith Containsしかしnothing.Howおかげでまだ – JayJay