【问题标题】:VSTO: How do I cast a mailitem as a form?VSTO:如何将邮件项转换为表单?
【发布时间】:2016-06-23 09:17:18
【问题描述】:

如果我有一个 Outlook.MailItem,我如何获得它的位置、宽度和高度?

我还需要“禁用”整个 Outlook.MailItem 表单 - 我该怎么做?

我想在这个 MailItem 上显示一个居中的“模态”对话框(只是一个 Windows.Forms.Form),而不是它实际上是模态的。

谢谢

更新(更多解释)...

当用户点击邮件上的“发送”时,我想在发送前检查它是否有大文件,如果文件太大,那么我想显示“文件太大,你想压缩他们”对话框。对话框必须以邮件表单为中心并禁用邮件表单(就像对话框一样)而不冻结 Outlook。

【问题讨论】:

  • 所以您要替换 Outlook 检查器?为什么不直接关闭它?
  • 请看我上面的更新。

标签: outlook vsto outlook-addin


【解决方案1】:

无需禁用 Outlook 中的默认表单。

例如,MailItem 类的Open 事件在 Inspector 中打开父对象的实例时触发。传递给事件处理程序的Cancel 参数允许中止默认操作。如果事件过程将此参数设置为 True,则打开操作未完成且不显示检查器。 当此事件发生时,Inspector 对象被初始化但尚未显示。 Open 事件与 Read 事件的不同之处在于,每当用户在支持单元格内编辑的视图中选择项目以及在检查器中打开项目时都会发生 Read。

您也可以考虑使用 Outlook 表单区域。 Replacement-all 布局允许覆盖整个检查器窗口。有关更多信息,请参阅Creating Outlook Form Regions

【讨论】:

  • 请看我上面的更新 - 抱歉不够清楚。 :)
【解决方案2】:

为什么需要对表单做任何事情?处理Application.ItemSend事件,必要时显示提示,必要时取消提交过程。

【讨论】:

  • 因为在某些情况下,我需要用户在发送邮件之前做出选择——比如文件是否太大,我必须询问用户是否确定收件人可以接收如此巨大的邮件或如果用户单击按钮将邮件导出到我们的 CRM 系统,并且邮件已经导出 - 那么我需要警告用户。
  • 好的,这样你就可以显示一个以活动检查器作为父窗口的对话框,不是吗?
  • 不 - 我收到此错误:“公共共享重载函数显示(所有者作为 IWin32Window,文本作为字符串)作为 DialogResult”:参数匹配参数“所有者”从“检查器”缩小到“IWin32窗口”
  • 那么您在检索检查器 HWND 时遇到问题?
猜你喜欢
  • 2011-09-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
相关资源
最近更新 更多