これをTextBoxで試しました(実際にはListBoxと違いはありません)。
概要 :
テキストとしてドラッグされたものをすべての Outlook 連絡先で検索します。ここでの検索は、個人の FullName に基づいています。
条件):
連絡先をドラッグすると、Outlook で選択したときに FullName が表示される必要があります。唯一の問題は、2 人が同じフルネームを持っている場合です。その場合は、ContactItem のプロパティを組み合わせて、ドラッグしたテキスト内でそれらを検索することにより、個人の一意の識別子を見つけようとすることができます。
private void textBox1_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetData("Text") != null)
{
ApplicationClass app;
MAPIFolder mapif;
string contactStr;
contactStr = e.Data.GetData("Text").ToString();
app = new ApplicationClass();
mapif = app.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderContacts);
foreach (ContactItem tci in mapif.Items)
{
if (contactStr.Contains(tci.FullName))
{
draggedContact = tci; //draggedContact is a global variable for example or a property...
break;
}
}
mapif = null;
app.Quit;
app = null;
GC.Collect();
}
}
もちろん、このコードは最適化されたものであり、使用される方法を説明するためのものです。
Explorer.Selection プロパティを GetData("Text") と組み合わせて使用してみてください [Outlook からのものであることを確認するか、DragOver イベントで GetData("Object Descriptor") を使用してメモリ ストリームをデコードし、"outlook "、見つからない場合はドラッグ操作をキャンセルしてください] そして、複数の連絡先をドラッグしてみませんか!
private void textBox1_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetData("Text") != null)
{
ApplicationClass app;
Explorer exp;
List<ContactItem> draggedContacts;
string contactStr;
contactStr = e.Data.GetData("Text").ToString();
draggedContacts = new List<ContactItem>();
app = new ApplicationClass();
exp = app.ActiveExplorer();
if (exp.CurrentFolder.DefaultItemType == OlItemType.olContactItem)
{
if (exp.Selection != null)
{
foreach (ContactItem ci in exp.Selection)
{
if (contactStr.Contains(ci.FullName))
{
draggedContacts.Add(ci);
}
}
}
}
app = null;
GC.Collect();
}
}