我在用 ListBox.Items.Contains用来检查重复项,但它似乎不起作用。我比较的是两个字符串。我在调试时查看了这些值,它们看起来完全相同,因此它应该向我显示一个消息框,说明找到了重复项。
该项目被添加到 myListBox每次,即使有重复,最多 6 个项目。
请注意,我使用的是供应商 SDK,因此不得不稍微更改一些代码,但它在功能上是相同的。代码如下。我已经评论了任何自定义控件以解释它们是什么。
//Custom control - is not inherited from ListBox but it does contain a listbox. It implements IBasicEnquiryControl2 which has a property Control which will be the .Net ListBox.
Class.Namespace.Windows.eListBox lstdisplay = (Class.Namespace.Windows.eListBox)EnquiryForm.GetControl("ListBox1",EnquiryControlMissing.Exception);
ListBox myListBox = (ListBox)lstdisplay.Control;
//Returns an object from a custom class. ID property is used a bit further down, which is an int64 value
Class.Namespace.CR _cr = new Class.Namespace.CR.GetCR;
//Value key pair object item.
EnquiryListItem item;
item = new EnquiryListItem(_cr.ID,ComboBox1.SelectedText);
//Logic to check for duplicates.
if(myListBox.Items.Count < 6) {
if (!myListBox.Items.Contains(ComboBox1.SelectedText.ToString())) {
myListBox.BeginUpdate();
myListBox.Items.Add(item);
myListBox.EndUpdate();
}
else {
System.Windows.Forms.MessageBox.Show("Duplicate found", "Duped", MessageBoxButtons.OK);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:另一个问题没有帮助,因为它似乎不适用于我的情况。看来我不能将 Linq 与此控件一起使用,也不能使用建议的 for 循环。我收到诸如System.Windows.Forms.ListBox does not contain a definition for 'Add'或相同但Any缺少定义的错误。System.Linq被引用。
看起来您正在添加EnquiryListItem您的Listbox.Items,而不是字符串。当您询问 ListBox 是否包含字符串时,它使用EnquiryListItem. 它永远是“不”,因为enquiryListItem.Equals(someString)永远不会是真的。
您可能需要遍历 items 集合并自己找到一个副本。这对于 Linq 来说相对容易
myListBox.Items.Cast<EnquiryListItem>().Any(item=> item.Text == ComboBox1.SelectedText.ToString())
Run Code Online (Sandbox Code Playgroud)