Я пробовал это с TextBox (нет разницы с ListBox на практике).
Резюме:
Поиск во всех внешних контактах того, кто был получен в виде текста.
Поиск здесь основан на ФИО человека.
условие (ы):
Когда вы перетаскиваете контакт, он должен отображать полное имя, если оно выбрано в Outlook. Единственный улов - это когда два человека имеют одинаковые полные имена !! Если это так, вы можете попытаться найти уникальный идентификатор человека, комбинируя свойства 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, или вы можете использовать GetData ("Object Descriptor") в событии DragOver, декодировать поток памяти, выполнить поиск для "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();
}
}