私は数日間このホイールを回転させています!アイテムが重複していない場合にのみListViewにアイテムを追加する
プロセス名(この例では "notepad")で現在実行中の特定のプロセスのMainWindowTitle
をListViewに追加しようとしています。私はどのように項目を作成して追加するかを考え出しましたが、今はListViewに複製があります。だから私がしようとしているのは、ListViewにアイテムを追加するだけです。ListViewにアイテムが存在しない場合は、ListViewにアイテムを追加するだけです。
関連情報:
-Thereが、私は(1から9まで)からMainWindowTitleを捕獲しようとしている同じプロセスの倍数になりますが、彼らはそれぞれが固有のIDを持っています。
- 各MainWindowTitleは、ここで私がこれまで持っているものだ
異なるだろう、私は、LINQの仕事をすることはできませんし、重複を防ぐために、foreachループを作るための方法が存在することになるかどうかはわかりません。
ご協力いただきありがとうございます。
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);
}
編集1:まだ追加重複するアイテム
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:クローサー、私は願って、まだ追加の重複
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);
}
}
残念ながら、 'ItemCollection'には 'Any'の定義が含まれていないとの意見がありました。 –
あなたは 'System.Linq;を使用していますか? 'Linq関数では、usingステートメントを使用する必要があります。 –
はい、System.Linqを使用します。 まだ新しいプログラマーで、C#の新機能ですが、.containsは 'オブジェクト'を呼び出すようですが、その理由はAnyが使えない理由です。 –