2017-12-07 6 views
0

私は、ユーザーが挿入した整数のListBoxを含むシステムを作成しています。私は検索ボタンと、ユーザがListBoxの中で検索したい整数を入力するための検索TextBoxを含んでいます。ユーザーが整数を入力すると、メッセージボックスが表示されて、ユーザーに、たとえばあることが通知されます。リストボックスに値1の1の整数、または整数がリストボックス内に存在しないことをユーザーに知らせるエラーメッセージボックス。TextBoxとボタンを使用してListBox内のアイテムを検索する

private void buttonSearch_Click(object sender, EventArgs e) 
{ 
    listBoxAddedIntegers.SelectedItems.Clear(); 
    for (int i = listBoxAddedIntegers.Items.Count - 1;i>=0; i--) ; 
    { 
     if (listBoxAddedIntegers.Items[i].ToString().ToLower().Contains(textBoxSearch.Text.ToLower())) ; 
     { 
      listBoxAddedIntegers.SetSelected(i, true); 
     } 
    } 

    // ... 
} 

私は、私はここに含まれることを意味していたコードに本当にわからない、と私はすでに挿入されているコードは、「i」が現在のコンテンツには存在しないことを示唆しています。

誰でも助けてください。あなたがこれをしなければならない

+2

を削除します。 for(int i = listBoxAddedIntegers.Items.Count - 1; i> = 0; i--)の行の ''の後。 '' 'その悪であり、またforループの本体を表しているので、それ以降のブロックは認識されません。あなたはそれを望みます。だから私はどちらか知られていません – FrankM

答えて

0
private void buttonSearch_Click(object sender, EventArgs e) 
    { 
     listBoxAddedIntegers.SelectedItems.Clear(); 

     var itemsFound = listBoxAddedIntegers.Items.Where(i=>i.ToString().ToLower().Contains(textBoxSearch.Text.ToLower())).ToList(); 

     if(itemsFound == null) 
     { 
      MessageBox.Show("No matches found."); 
     } 
     else 
     { 
      MessageBox.Show("Found " + itemsFound.Count + " matches."); 
     } 

    } 
0

int count=0; 

    for(int i=0;i<listBoxAddedIntegers.Items.Count;i++) 
    {  if(listBoxAddedIntegers.Items[i].Items[i].ToString().ToLower().Contains(textBoxSearch.Text.ToLower()) 
    { 
     count+=1;  
    } 
    } 

    if(count>0) 
{ 
    //display your message here after the loop with the count 
} 
else 
{ 
    //display your message with error 
} 

それはあなたを助けている場合に有用であるとして、この答えをマークしてください。

+0

ありがとう。この答えは私にとって非常に役に立ちました。しかし、カウントの後の最初のメッセージボックスでは、「1つのアイテム '7月」がリストボックスに表示されるようにするには、検索テキストボックスに入力された実際のテキストを表示するだけです"? –

+0

メッセージをカスタマイズするには、「+ count +「item」+」(名前を表示したいものであれ)+「ListBox」で何かを行うことでメッセージをカスタマイズできます。答えがあなたを助け、それをupvoteした場合、この答えを正しいとマークしてください! –

0

私はすでに挿入されているコードは、「私は」は既にコメントで述べたよう@FrankM現在のコンテンツ

に存在していないことを示唆しています。 for -loopの後に末尾に;があります。

for (int i = listBoxAddedIntegers.Items.Count - 1;i>=0; i--) ; 

これはfor -loop { ... }以内にあなたのコードを実行するために防ぐことができます。これは、これが最後の中括弧内のコードは、すべての定義された変数は、次のコードを使用できなくなりますように、独自のスコープ内にあることとなることも意味します。

for (int i = listBoxAddedIntegers.Items.Count - 1;i>=0; i--) 
{ 
    // Do nothing. 
} 
{ 
    // now your code 
} 

に転写することができますすでに一致する項目を選択するためにそうであるように

:あなたの実際の質問に答える


。カウンターを数えることで、このループを広げることができます。そして、後で​​と結果を表示します。リストの項目が入力されたTextBox.Textが含まれている場合は、現在チェックしている

listBoxAddedIntegers.Items[i].ToString().ToLower().Contains(textBoxSearch.Text.ToLower())) 

あなたの次のコードスニペットで


したがって、ユーザーがためListBoxと検索で3、4、5、...、13、23を入力した場合。彼は3試合を獲得する。一致が1つだけの場合は、String.Equals()を使用してください。 ToLower()の呼び出しを避けるためにStringComparison.InvariantCultureIgnoreCaseを使用しました。

private void buttonSearch_Click(object sender, EventArgs e) { var counter = 0; for (int i = 0; i < this.listBoxAddedIntegers.Items.Count; i++) { var item = this.listBoxAddedIntegers.Items[i]; if (string.Equals(item.ToString(), this.textBoxSearch.Text, StringComparison.InvariantCultureIgnoreCase)) { this.listBoxAddedIntegers.SelectedItems.Add(item); counter++; } } if (counter == 0) { MessageBox.Show($"No matches for \"{this.textBoxSearch.Text}\" found!", "Search Results", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show($"{counter} items found for \"{this.textBoxSearch.Text}\"!", "Search Results", MessageBoxButtons.OK, MessageBoxIcon.Information); } } 


ヒント:string interpolation代わりString.Format()又は文字列連結(+)を使用することができ C#6ので

関連する問題