我試着用一個TextBox(在實踐中與ListBox沒有什麼區別)。
摘要:
在一個所有Outlook聯繫人搜索收到拖累文本。 這裏的搜索是根據這個人的全名。
條件(S):
當拖動聯繫人,則必須在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,或者您可以在DragOver事件中使用GetData(「Object Descriptor」),解碼內存流,搜索「展望」,如果沒有找到取消拖動操作]爲什麼不拖動多個聯繫人!
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();
}
}
我不明白這個解決方案。在drop事件中,我收到一個DataObject。這是什麼意思「從Outlook中選擇項目」?可能有多個打開的窗口有多個選擇,都可能是相關的聯繫人...不是? – 2009-07-31 16:29:33
當我嘗試這個時,我無法直接從DataObject獲取項目。所以在這個事件中,我會查看包含當前視圖中所選項目的outlook Explorer.Selection。然後,我會從每個項目 – 76mel 2009-07-31 17:17:57
@ 76mel獲取屬性信息:請問您可以粘貼一些示例代碼嗎? – 2009-08-01 06:24:31