Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取预约的Outlook日历_C#_Calendar_Outlook_Outlook Addin - Fatal编程技术网

C# 如何获取预约的Outlook日历

C# 如何获取预约的Outlook日历,c#,calendar,outlook,outlook-addin,C#,Calendar,Outlook,Outlook Addin,我在Outlook中创建了名为“时间跟踪”的个人日历以及我的常规exchange日历。我已经为一个简单的Outlook创建了一个窗体区域AddIn。我希望表单区域仅在约会进行/源自时间跟踪日历时显示。下面是两个日历的屏幕截图 我只想显示来自我的时间跟踪日历的表单区域 我尝试了以下代码: public partial class TimeTrackingRegionFactory { // Occurs before the form region is initialized.

我在Outlook中创建了名为“时间跟踪”的个人日历以及我的常规exchange日历。我已经为一个简单的Outlook创建了一个窗体区域AddIn。我希望表单区域仅在约会进行/源自时间跟踪日历时显示。下面是两个日历的屏幕截图

我只想显示来自我的时间跟踪日历的表单区域

我尝试了以下代码:

public partial class TimeTrackingRegionFactory
{
    // Occurs before the form region is initialized.
    // To prevent the form region from appearing, set e.Cancel to true.
    // Use e.OutlookItem to get a reference to the current Outlook item.
    private void TimeTrackingRegionFactory_FormRegionInitializing(object sender, Microsoft.Office.Tools.Outlook.FormRegionInitializingEventArgs e)
    {
        var appt = e.OutlookItem as AppointmentItem;
        if (appt != null)
            e.Cancel =
                !(appt.Parent as Microsoft.Office.Interop.Outlook.MAPIFolder).Name.Equals(
                    Constants.TIME_TRACKING_CALENDAR);
    }
}
但是,我发现两者的日历名称都是“calendar”。我看到了这个,但是我检查了一下,StoreID和Store属性看起来都是一样的

如果我保存约会,然后重新打开它,它会说约会来自时间跟踪日历,然后根据上面的代码正确显示表单区域

这就像所有约会似乎都默认为日历,而不是时间跟踪日历,即使我试图从那里创建一个日历,直到它被保存

有没有办法确定约会项目保存到哪个日历


谢谢,Bill N查看appt.Parent属性-它将返回父MAPIFolder对象。

Dmitry建议有效:

var outlook = new Microsoft.Office.Interop.Outlook.Application();

e.Cancel = !(outlook.Application.ActiveExplorer().CurrentFolder).Name.Equals(
            Constants.TIME_TRACKING_CALENDAR);

我确实查看了父属性:(appt.Parent为Microsoft.Office.Interop.Outlook.MAPIFolder)。名称,但名称与“日历”相同。商店也一样。我确实看到有一个文件夹属性,计数是2。这是正确的。如果我创建一些截图会有帮助吗?我已经更新了问题。正在将约会创建为普通outlook约会(请参见上面的屏幕截图)。但是,一旦我保存了它,上面的代码就会起作用,因为它似乎知道它来自时间跟踪日历。是的,Outlook在默认日历文件夹中创建约会,然后在调用“保存”时移动它们。调用save是您的一个选项吗?不确定您所说的“调用save是一个选项”是什么意思?理想情况下,我只想显示来自时间跟踪日历的表单区域。我不确定是否有一些“OnSave”事件,但我认为这不会起作用,因为它将显示表单区域。我可能不得不求助于一些只保存到时间跟踪日历的自定义表单。我的意思是,如果您可以调用AppointmentItem.Save,然后再运行表单逻辑。如何在文件夹中创建约会?它们是从Outlook UI创建的吗?如果AppointItem.Parent测试失败,是否尝试使用Application.ActiveExplorer.CurrentFolder检索当前显示的文件夹?