恐怕很长,但请忍受...

我有一个VSTO项目,该项目允许将Outlook项目(邮件,附件等)拖放到winforms控件上-特别是TreeView(托管在Outlook内部的CustomTaskPane中)通过突出显示拖动发生的文件夹来提供通常的UI反馈。 我已经将TreeView的AllowDrop属性设置为true,并且触发了我想要的所有事件,并且一切正常。

但是,在较旧版本的Outlook(2010年之前)中,我遇到了这样的情况:VSTO公开的对象模型较旧,并且我无法访问允许我捕获通过托管代码通过Outlook iself拖动的内容的属性。

通过直接挂接到本机Windows拖放中,我已经解决了这个问题。 允许这样做的代码相当广泛,涉及很多互操作工作,但关键是我必须通过-注册控件

[DllImport("OLE32.DLL", ExactSpelling = true, CharSet = CharSet.Auto, PreserveSig = false)]
    public static extern void RegisterDragDrop(HandleRef hwnd, IOleDropTarget target);

我扩展TreeView类并实现IOleDropTarget以允许通过此方法注册新的控件类。 再次,这很好用,并且在进行了一些C#魔术处理之后,将所有放置在treview中的任何内容丢弃的对象都可以作为字节数组供我使用。

这是通过互操作注册TreeView 的问题,这意味着我无法使用其AllowDrop属性对其进行注册。 尝试同时执行这两个操作会引发一个错误,告诉我只能为控件注册一次拖放操作。 仅通过互操作进行注册会完全绕过“托管”注册,就TreeView而言,它尚未注册,这意味着我不会遇到任何拖放事件,也无法处理对用户的任何反馈。

有什么办法可以使用interop的注册方法,同时通过通常的winforms方法告诉同一个控件它已注册用于拖放? 另外,谁能想到任何巧妙的覆盖控件的方法,这样我就可以从TreeView获得反馈,并从互操作注册控件获得删除事件?

希望这一切都有道理。

预先感谢您的任何回答。

  ask by user1093557 translate from so

本文未有回复,本站智能推荐:

1回复

Winforms列表到datagridview但没有内容

我需要一些使用winforms的帮助。 我有一个datagridview,在代码后面我设置了它的数据源: ContactItem文档: https : //msdn.microsoft.com/en-us/library/office/ff867603.aspx 我有三列Da
1回复

c#:如何在winforms应用程序中显示/预览PDF?

我想在winforms应用程序中显示/预览本地pdf文件() 目前我正在使用Webbrowser控件并尝试了Navigate(uri)方法,但它正在启动带有第三方界面的PDF文件 以下是与相同背景相关的几个高度投票的答案,但遗憾的是它没有帮助我,因为解决方案涉及使用已安装的pdf查看器在
1回复

Winforms和VSTO Excel ShowDialog()部分为模态

有史以来最奇怪的事情! 我正在使用Excel加载项,功能区中有一些按钮会弹出一些模式对话框。 从功能区中的按钮单击事件以相同的方式启动所有这些对话框: 到目前为止,一切工作都很好-当模态表单出现时,我无法更改单元格选择并单击功能区,直到关闭表单。 除了一种形式。 当显示此
1回复

拖放事件不再触发

我的项目在使用拖放功能时不再起作用。 我创建了一个新的简单项目来隔离问题。 (基于此 )我只是创建了一个listview(listView1),将背景更改为蓝色。 然后,我从TaskPaneControl设计器添加了3个事件,然后添加了以下代码行: 我在每行中都设置了一个断点,并期
1回复

将mailitem从Outlook中的“高级查找”窗口中拖放到Winforms上?

用于将MailItem从Outlook拖放到寡妇窗体上的大多数代码示例都涉及对Outlook的ActiveExplorer窗口的引用... 这是一个例子 ...但是,如果从“ 高级查找”弹出窗口中拖动,则会产生意外的结果。 发生的情况是您的C#或VB代码从Outlook主窗口
2回复

当用户放大Excel时,为什么禁用WinForms控件?

当我打开带有嵌入式WinForms控件的Excel电子表格时,将其放大一点(按Ctrl +滚动),然后尝试单击一个控件(已通过按钮和列表框进行了测试),则会在弹出窗口中显示以下消息: 由于已缩放文档,因此Windows窗体控件已被禁用。 当变焦恢复到100%时,控件将重新激活。
1回复

Winforms TreeView滚动条不会一直滚动

我在WinForms应用程序中遇到了奇怪的滚动问题,因此我在另一个项目中测试了该问题,然后看到了一个非常奇怪的行为。 问题:滚动条不能一直向下滚动-没有显示整个树。 正常行为(单独的项目): 生成节点时,我已经用简单的TreeView创建了一个Form ,一切正常。 奇
1回复

WPF ContextMenu单击路由到WinForms应用程序

我正在编写一个WPF控件,它托管在Word VSTO AddIn(WinForms)中。 现在我在上下文菜单上遇到鼠标单击事件的问题。 如果我单击左半部分的上下文菜单项(WinForms应用程序上的部分),则单击将直接转到WinForms应用程序,我的上下文菜单不会收到该事件。 如
1回复

Word Interop不提取数据

我正在使用Word 2016,但无法从对象获取数据。 我的片段是这样的: 在作业之前,请查看以下段落: 方法Microsoft.Office.Interop.Word.DocumentClass.get_Paragraphs()调用的评估需要一个COM调用。 在这种情况下,
7回复

Excel Interop - 效率和性能

我想知道我可以做些什么来提高Excel自动化的性能,因为如果你在工作表中有很多事情,它可能会很慢...... 这里有一些我发现自己: ExcelApp.ScreenUpdating = false - 关闭重绘屏幕 ExcelApp.Calculation = Excel