2012-06-13 58 views
4

我正在創建一個允許用戶存儲有關其類的信息的應用程序。我的應用程序中有一個按鈕,允許用戶輸入信息,如果它與listBox中的任何項目匹配,則應該顯示關於它的信息。想要將字符串與列表框中的任何項目進行比較

但我只能得到它爲listBox如位置[0]等

我的目標是得到它的一些如何比較在listBox所有項目的具體項目位置工作。任何幫助,將不勝感激。謝謝。

private void button3_Click(object sender, EventArgs e) 
    { 
     if (listBox2.Items[0].ToString() == "PersonalInfo") 
     { 
      label.Text = "test";    
     } 
    } 

回答

6

您已硬編碼檢查Items[0]。您需要遍歷列表中的所有項目,而不是僅檢查一個項目。嘗試是這樣的:

foreach(var item in listBox2.Items) 
{ 
    if(item.ToString() == stringToMatch) 
    { 
    label.Text = "Found a match"; 
    } 
} 

的替代,更簡單的實現(這將會停止,如果/當它發現,而不是繼續檢查每個項目匹配)將

if(listBox2.Items.Any(item => item.ToString() == stringToMatch)) 
{ 
    label.Text = "Found a match"; 
} 
5

那麼你可以使用LINQ ......是這樣的:

if (listBox2.Items 
      .Cast<object>() 
      .Select(x => x.ToString()) 
      .Contains("PersonalInfo")) 
{ 
    label.Text = "test"; 
} 

或者,如果你想獲得第一場比賽的細節:

var match = listBox2.Items 
        .Cast<object>() 
        .FirstOrDefault(x => x.ToString() == "PersonalInfo"); 
if (match != null) 
{ 
    // Use match here 
} 
+0

我不認爲lambda表達式是必需的。簡單地做ListBox.Items.Contains(StringValue)應該可以工作。 – Matt

+0

@Matt - 我在想同樣的事情,但我認爲問題在於Items是一個'Object'的集合,需要用'ToString'來比較(我的猜測)。 – CAbbott

+0

@Matt:你需要'Cast'調用才能使用LINQ的其餘部分,並且你假設它已經*是一個字符串。 –

6

寫一個循環來檢查每個項目

foreach(var item in listBox2.Items) 
{ 
    if (item.ToString()== "PersonalInfo") 
    { 
    label.Text = "test"; 
    break; // we don't want to run the loop any more. let's go out    
    }  
} 
+1

爲休息+1,我不認爲包括這一點 – yoozer8

相關問題