Ich habe meine Räder an diesem Tag gedreht!Artikel nur dann zu ListView hinzufügen, wenn der Artikel kein Duplikat ist
Versucht, die MainWindowTitle
eines bestimmten derzeit laufenden Prozesse nach Prozessnamen, in diesem Beispiel "notepad", zu einem ListView hinzuzufügen. Ich habe herausgefunden, wie man das Element erstellt und hinzufügt, aber jetzt habe ich Duplikate in meinem ListView. Also versuche ich nur ein Element zu meiner ListView hinzuzufügen, wenn es nicht bereits als exakter Eintrag in meiner ListView existiert.
Relevante Informationen:
-Es wird mehrere der gleichen Prozesse sein, dass ich die Mainwindowtitle aus zu erfassen versuchen (1 bis 9), aber sie haben jeweils eine eindeutige ID.
-Jeder Mainwindowtitle wird anders sein, ist
Hier ist, was ich bisher habe, kann ich nicht LINQ Arbeit zu machen und ich bin nicht sicher, ob es wäre ein Weg, um eine foreach-Schleife, um Duplikate zu vermeiden.
Ich freue mich über jede Hilfe!
Process[] processList = Process.GetProcessesByName("notepad");
foreach (Process process in processList)
{
ListViewItem item = new ListViewItem();
item.Content = process.MainWindowTitle;
item.Tag = process;
if (listView.Items.Contains(item))
{
MessageBox.Show("Duplicate");
}
else
{
MessageBox.Show("New Item!");
listView.Items.Add(item);
}
Edit 1: Still Hinzufügen doppelte Elemente
Process[] processList = Process.GetProcessesByName("notepad");
foreach (Process process in processList)
{
ListViewItem item = new ListViewItem();
item.Content = process.MainWindowTitle;
item.DataContext = process;
var itemz = listView.Items.Cast<ListViewItem>().ToList().Where(x => x.DataContext == process);
if (listView.Items.Contains(itemz))
{
MessageBox.Show("Duplicate");
}
else
{
MessageBox.Show("New Item!");
listView.Items.Add(item);
}
Edit2: Näher, hoffe ich, noch das Hinzufügen von Duplikaten
Process[] processList = Process.GetProcessesByName("notepad");
foreach (Process process in processList)
{
ListViewItem item = new ListViewItem();
item.Content = process.MainWindowTitle;
item.DataContext = process;
var itemz = listView.Items.Cast<ListViewItem>().ToList().Where(x => (x.DataContext as Process).Id == process.Id);
if (itemz == null)
{
MessageBox.Show("Duplicate");
}
else
{
MessageBox.Show("New Item!");
listView.Items.Add(item);
}
}
Vielen Dank für den Gedanken, jemand in einem anderen Forum hatte vorgeschlagen, dass "ItemCollection" leider keine Definition für "Any" enthält. –
Verwenden Sie "System.Linq;" Linq Funktionen erfordern die Verwendung von Anweisung zu arbeiten. –
Ja, mit System.Linq; Immer noch ein neuer Programmierer insgesamt, und neu zu C#, aber .contains scheint ein "Objekt" zu nennen und ich glaube, dass deshalb Any ist unbrauchbar –