C# 用于筛选收件人的Outlook加载项

C# 用于筛选收件人的Outlook加载项,c#,outlook,vsto,C#,Outlook,Vsto,我想用C构建一个Outlook加载项,该加载项在日历功能区中有一个按钮,用户可以单击该按钮与他们的一名员工创建新会议。我们希望用户经理能够从一个只包含自己员工的筛选列表中选择员工,而不必搜索整个目录。最好的方法是什么 增编: 我做了一些搜索,发现了一种可能的过滤器方法 我知道SelectNamesDialog函数将为我提供一个地址簿对话框: Outlook.SelectNamesDialog snd = Application.Session.GetSelectNamesDialog(); 我

我想用C构建一个Outlook加载项,该加载项在日历功能区中有一个按钮,用户可以单击该按钮与他们的一名员工创建新会议。我们希望用户经理能够从一个只包含自己员工的筛选列表中选择员工,而不必搜索整个目录。最好的方法是什么

增编: 我做了一些搜索,发现了一种可能的过滤器方法

我知道SelectNamesDialog函数将为我提供一个地址簿对话框:

Outlook.SelectNamesDialog snd = Application.Session.GetSelectNamesDialog();
我想把它和我找到的一段代码结合起来。我对其进行了修改,以返回所有经理直接下属的姓名,即经理手下的员工

我认为我走对了方向,但我不确定下一步该怎么办。现在如何允许用户通过GetSelectNames对话框选择其中一个名称?如果您的答案是psuedocode,则可以

// source: "How to: Get Information About Direct Reports of the Current User's Manager" 
// https://msdn.microsoft.com/en-us/library/ff184617.aspx
        private List<string> GetManagerDirectReports()
        {
            List<string> AddressNames = new List<string>();

            Outlook.AddressEntry currentUser = Globals.ThisAddIn.Application.Session.CurrentUser.AddressEntry;
            if (currentUser.Type == "EX")
            {
                Outlook.ExchangeUser manager = currentUser.GetExchangeUser().GetExchangeUserManager();
                if (manager != null)
                {
                    Outlook.AddressEntries addrEntries = manager.GetDirectReports();
                    if (addrEntries != null)
                    {
                        foreach (Outlook.AddressEntry addrEntry in addrEntries)
                        {
                            //System.Windows.Forms.MessageBox.Show(addrEntry.Name);
                            AddressNames.Add(addrEntry.Name);
                        }
                    }
                }
            }
            return AddressNames;
        }

通讯簿不允许您将列表限制为某些用户的子集,因此您需要打开自己的窗口,提示用户从预筛选的列表中进行选择。

我现在似乎能够发布我自己问题的答案

我在表单区域中添加了一个下拉列表,并添加了以下代码以使用经理直接下属的姓名填充下拉列表:

// Get Outlook list of employees who report to manager, using Exchange data.
List<string> mgrAddressNames = GetManagerDirectReports();

if (mgrAddressNames.Count >= 1)
{
   try
   {
    // System.Windows.Forms.BindingSource bindingSource1;
    // Create a Binding Source to the ComboBox to make values in ComboBox match the results of the list of direct reports.
    System.Windows.Forms.BindingSource bindingSource1 = new System.Windows.Forms.BindingSource();
    bindingSource1.DataSource = mgrAddressNames;
    EmployeeInvited.DisplayMember = "Value";
    EmployeeInvited.ValueMember = "Key";
    EmployeeInvited.DataSource = bindingSource1.DataSource;

    bindingSource1.Dispose();

(etc)

最好的方法是谷歌。这不是一个如何操作的网站。请查看以下内容:。祝你好运。当然我已经试过谷歌了,这让我来到了这里。。我阅读了帮助页面。我搜索了前面的问题。我的问题符合主题标准,它是一个特定的编程问题,是一个实用的、可回答的问题,是软件开发所特有的。我发现许多其他问题都是从“如何”或“如何”开始的,它们并不都是代码错误消息。我的问题是一个建设性的问题,它将“激发解释“为什么”和“如何”的答案。”。这是当你已经在做某件事并且撞到了墙时你会来到的那种网站。我已经在这个网站上工作了几个小时并且撞到了墙。我已经编写了大部分程序。我不是泛泛地问,嘿,我怎么做编程?问题是关于过滤收件人列表的。但如果你坚持要展示作品,我会在问题中添加几行代码,询问问题的症结所在,希望有人能提出更好的方法,我会得到我想要的答案。这就是我要做的。发布一些代码,你会看到答案。谢谢。我现在明白了。我正准备这么做。以前我不能回答我自己的帖子,但现在我可以了。我补充了我得出的答案。