ListBox重复检查

时间:2017-03-30 09:32:57

标签: c# listbox

昨天我发布了another question,但由于发布了两个答案,我还没有进一步的回复。不幸的是,它们都不适合我。如果这违反了重新发布类似问题的规则,请道歉。

我正在尝试按下按钮时检查ListBox是否有重复项。它应该将ComboBox的值加到ListBox

使用Linq查询建议的所有答案,例如

myListBox.Items.Any(item=>((EnquiryListItem)item).Text == ComboBox1.SelectedText.ToString())

或者

if (!myListBox.Items.Cast<String>().Any(item => item == ComboBox1.SelectedText.ToString())){

但是,我的控件没有AnyCast的条目。

我尝试使用如下所示的foreach循环,但收到错误object does not contain a definition for 'Text' and no extension method 'Text' accepting a first argument of type 'object' could be found

            foreach (var item in ListBox1.Items)
            {
               if (item.Text.Contains(Combobox1.SelectedText.ToString()))
               {
                   //select item in the ListBox
                   debugMsg("Duplicate","");
                   break;
               } else {
                ListBox1.Items.Add(Combobox1.SelectedItem); }
            }

我还能使用其他方法吗?我一般都在搜索SO和互联网,但每次都会遇到相同的建议 - 几乎总是使用Linq,它显然不适用于我的供应商特定的SDK Windows窗体应用程序。他们记录了他们的ListBox控件并建议它继承.NET控件,但只提供添加/删除项目的代码,没有重复检查。

3 个答案:

答案 0 :(得分:1)

确保您使用的是System.Linq,因为Cast应该有效 我使用以下代码完成了您想要的结果:

if ( listBox1.Items.Cast<string>().Contains( comboBox1.SelectedItem.ToString() ) )
{
    MessageBox.Show( "duplicate" );
}
else
{
    listBox1.Items.Add( comboBox1.SelectedItem );
}

自定义控件(OP的情况):
如果foreach解决方案适用于您的自定义控件且.Text不是有效的扩展方法,请使用:

item.ToString().Contains(Combobox1.SelectedItem.ToString())

答案 1 :(得分:0)

使用不带Text的foreach循环,如EpicKip

所示
            if ( ListBox1.Items.Contains( ComboBox1.SelectedItem ) )
            {
                debugMsg( "duplicate", "" );
            }
            else
            {
                ListBox1.Items.Add( ComboBox1.SelectedItem );
            }

答案 2 :(得分:-1)

if (ListBox.Items.Contains(TextBox.Text))
MessageBox.Show("Entry allready exists");
else
NameList.Items.Add(TextBox.Text.Trim());

我这样做了,而且效果很好。