代码之家  ›  专栏  ›  技术社区  ›  Roee Adler

在C#中接收(拖放)Outlook联系人?

  •  4
  • Roee Adler  · 技术社区  · 16 年前

    MAPIFolder.Items.Restrict(somefilter) ,可在 Microsoft.Office.Interop.Outlook

    在我的应用程序中,我的用户需要选择几个联系人来应用特定的操作。我想添加一个功能,允许用户从Outlook中拖动联系人,并将其放到UI中的某个列表框中(我在WPF中工作,但这可能是更一般的问题)。

    我对C#和WPF非常陌生-我如何才能:

    1. 在列表框上接收已删除的项目
    2. 验证它是否为ContactItem(或包装ContactItem的内容)

    谢谢

    3 回复  |  直到 16 年前
        1
  •  6
  •   manji    16 年前

    我用一个文本框尝试了这一点(实际上与列表框没有区别)。

    总结:

    此处的搜索基于此人的全名。

    当您拖动联系人时,在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();
        }
    }
    

    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();
        }
    }
    
        2
  •  1
  •   Damien_The_Unbeliever    16 年前

    Outlook联系人在删除时支持以下格式:

    (0): "RenPrivateSourceFolder"
    (1): "RenPrivateMessages"
    (2): "FileGroupDescriptor"
    (3): "FileGroupDescriptorW"
    (4): "FileContents"
    (5): "Object Descriptor"
    (6): "System.String"
    (7): "UnicodeText"
    (8): "Text"
    

    列表中最有趣的一个(对我来说)是对象描述符,它让我找到了一个有类似问题的人:

    http://bytes.com/topic/visual-basic-net/answers/527320-drag-drop-outlook-vb-net-richtextbox

        3
  •  0
  •   76mel    16 年前

    您可能要做的是在.wpf应用程序中接受拖放事件,然后从outlook获取所选项目并将其拉入应用程序。

    使现代化

    Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
    Microsoft.Office.Interop.Outlook.Explorer activeExplorer = app.ActiveExplorer();
    Microsoft.Office.Interop.Outlook.Selection currentSelection = activeExplorer.Selection;
    

    然后,您可以迭代currentSelection集合,查看用户拖过的内容。