昨天我发布了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())){
但是,我的控件没有Any
或Cast
的条目。
我尝试使用如下所示的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控件,但只提供添加/删除项目的代码,没有重复检查。
答案 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());
我这样做了,而且效果很好。