2012-03-14 15 views
0

大規模な小売チェーンの支店で構成されたListBoxコントロールがあります。システムを使用しているスタッフは、関連する支店にログインする必要があります。私は、彼らが支店を見つけるためにListBoxを検索できるようにしたいと思います。ListBoxコントロールを検索し、最も近い一致をプログラムで選択する

私は検索ボックスの変更でたときのテキストのイベントハンドラを作成し、すでにStackOverflowの上でコード音を使用しようとしました:

private int lastMatch = 0; 

private void txtSearch_TextChanged(object sender, EventArgs e) 
    { 
     int x = 0; 
     string match = txtSearch.Text; 

     if (txtSearch.Text.Length != 0) 
     { 
      bool found = true; 
      while (found) 
      { 
       if (lbBranches.Items.Count == x) 
       { 
        lbBranches.SetSelected(lastMatch, true); 
        found = false; 
       } 
       else 
       { 
        lbBranches.SetSelected(x, true); 
        match = lbBranches.SelectedValue.ToString(); 
        if (match.Contains(txtSearch.Text)) 
        { 
         lastMatch = x; 
         found = false; 
        } 
        x++; 
       } 
      } 
     } 
    } 

私はコンパイルして、検索ボックスに入力を開始すると、私はこれを取得エラー:

Object reference not set to an instance of an object.

問題の行は次のとおりです。

match = lbBranches.SelectedValue.ToString(); 

何が間違っているのか分かりません。

ありがとうございます!

+0

通常、このエラーはヌルオブジェクトのプロパティを参照しようとしていることを意味します。与えられた行では、 'lbBranches'またはその' SelectedValue'プロパティのいずれかがnullのように見えます。与えられたコードから、それがなぜそうであるかを伝えるのは難しいです。 –

答えて

1

リストボックスのSelectedValueは、リストボックスのValueMemberプロパティを指定して、選択したアイテムの値を読み取るプロパティを示す場合にのみ値を返します。あなたは、この場合に使用するプロパティはのSelectedItemです:

match = lbBranches.SelectedItem.ToString(); 
+0

乾杯、それは働いた。今すぐ適切な項目を選択していない理由を理解する必要があります:p –

+1

あなたのコードに表示されているものに基づいて、それはcontains条件を満たす最初に見つかったものと一致し、ループを終了します。テキストボックスに短い文字のリストがあると、誤ったものと一致するように見える可能性があります。私はHardyvに同意する必要があります。 –

0

ユーザーが(それゆえエラー)、それは何も値が選択されていない可能性がありますテキスト入力された - 何がによって入力されていることを心に留めておくとユーザーはコントロールのリストボックスのサブ要素の選択と義務的または直接的な関連がありません

あなたがしていることは、完全なコンボボックスコントロールで実装する方が簡単かもしれないし、MSDNのいくつかの例があなたにも非常に役立ちます

関連する問題