2016-04-05 7 views
0

こんにちはリストボックスにリストの項目があります。 Landen、Lucie、812-692-5576、Jig Is Up 名前や電話番号、または比率で検索する必要があります.... 。 リストボックスでコンマで区切って検索すると

 int x = 0; 

     string match = textBox1.Text; 

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

は、私はあなたのコードから読み取る何をそんなに

答えて

0

に感謝し、私はこのコードを入力したが、彼はライン内の任意の場所ATTの文字列で検索している、あなたはList内容を検索するためのロジックを必要と最初に一致するリスト項目をハイライト表示し、TextBoxの値をSelectedListItem

このスニペットは私が説明したことを行います。

for(int i=0;i<listBox1.Items.Count;++i) 
{ 
    if(listBox1.Items[i].ToString().Contains("searchString")) 
    { 
      // match 
      listBox1.SetSelected(i, true); 
      textBox2.Text = listBox1.SelectedItem.ToString();    
    } 
} 
+0

'listBox1.SelectedItem'は' textBox2.Text = listBox1.SelectedItem.ToString()の実行時にnullになります; 'ので、あなたはその行の後にselectedItemを割り当てています –

+0

@このことを強調してくれてありがとう、ありがとうございました。今更新されました。 –

+0

素晴らしい..!今すぐその良い答え –

0

次などのforeachを介してこれを達成することができます

bool itemFound = false;  
object currentObject = null; // remains null if no match found 
foreach (var item in listBox1.Items) 
{ 
    if (item.ToString().Contains(txtbox1.Text)) 
    { 
     currentObject = item; // will give you the current item 
     textBox2.Text=item.ToString();     
     break; // Break; if you need to check for the first occurance 
    } 
} 
if (currentObject != null) 
    listBox1.SelectedItem = currentObject; 
else 
    textBox2.Text = "Item not found"; 
1

をあなたの情報を保持するクラスを作成します。

public class Card 
{ 
    public string Name { get; set; } 
    public string Phone { get; set; } 
    public string Note { get; set; } 

    public override string ToString() 
    { 
     return string.Format("{0}, {1}, {2}", Name, Phone, Note); 
    } 
} 

必要に応じてインスタンスを作成します。

var card = new Card { Name = "Landen, Lucie", Phone = "812-692-5576", Note = "Jig Is Up" }; 

このクラスを使用してListBoxを設定します。

var allTheCards = new List<Card>(); 
// populate the cards 

listBox1.DataSource = allTheCards; 

ここで特定のフィールドを検索できます。文字列ではなく独自のクラスを使用するために、コード内で他の更新を行う必要があります。あなたのコメントにしてTAWは、ファイルからの読み取り時に、あなたはまだ、このソリューションを使用することができ、提案内容に拡大

Card match = listBox1.SelectedItem; 

if (match.Name.Contains(textBox1.Text) 
    || match.Phone.Contains(textBox1.Text) 
    || match.Note.Contains(textBox1.Text)) 
{ 
    ... 
} 

。結果をループし、結果を使用してCardクラスを設定してください。

ここでLINQを使用して、それを行うための一つの可能​​な方法です:

listBox1.DataSource = (from lines in File.ReadAllLines("someFile.txt") 
         let parts = lines.Split(',') 
         select new Card 
            { 
             Name = string.Format("{0} {1}", parts[1], parts[0]), 
             Phone = parts[2], 
             Note = parts[3] 
            }).ToList(); 
+0

ありがとうが、私はテキストファイルから私のリストボックスをロードする –

+1

'、'でそれらをspilttingすることによって、そのテキストファイルの行からクラスインスタンスを読み込むことができます。 'public card(string input){var p = input.Split( '、');}このようなコンストラクタを追加するだけです。名前= p [0]。電話= p [1];ノート= p [2];} ' – TaW

関連する問題