在标题中的Word 2003自动化中使用拖放操作的奇怪行为

时间:2010-03-18 07:13:45

标签: c# interop ms-office vsto office-2003

我正在为Word 2003开发基于模板的插件,允许用户将列表框中的元素拖放到word文档中。不幸的是,当我试图在文档的标题中删除元素时,我会遇到一种非常奇怪的行为。

  1. 打开模板并在标题中输入内容
  2. 关闭标题并在页面上插入一些内容
  3. 添加分页符。
  4. 切换到页面布局模式,将缩放级别设置为“两页”
  5. 打开标题
  6. 将列表框中的列表项缓慢拖放到标题中。
  7. 查看多个页面设置对话框,导致Word崩溃。
  8. 这是我的代码:

    // in ThisDocument.cs
    
    public MyUserControl _control;
    public void Init()
    {
        _control = new MyUserControl();
        ActionsPane.Controls.Add(_control);
        ActionsPane.Visible = true;
    }
    
    // in MyUserControl.cs
    
    public void listBox1_MouseDown(object sender, MouseEventArgs e)
    {
        DoDragDrop("something", DragDropEffects.Copy);
    }
    

    我是否在实施Drag and Drop时遇到了一些错误?这种奇怪的行为是否有解决方法?

    提前致谢,
    Oliver Hanappi

    视频

    我制作了一个显示错误的小视频。您可以从此处下载:http://rapidshare.com/files/364907873/word-2003-bug.rar

    不幸的是我使用的工具没有注意到我改变了显示设置,所以虽然我使用了1280x768,它录制了1920x1200,很抱歉奇怪的视频大小。如果您无法观看视频,可能缺少编解码器。你可以在这里得到它:http://camstudio.org/

    我也忘了提到错误也发生在Word 2007中。因为在我的本地机器上我只有Word 2007,我用Word 2007录制了视频,但它基本上与Word 2003相同(我发现了缺陷)

2 个答案:

答案 0 :(得分:1)

这在Word 2007中对我有用,但它似乎是一个糟糕的解决方法。尝试使用剪贴板在文档中设置关键字,然后处理WindowSelectionChange事件,该事件似乎在文本插入后可靠地触发,以执行您真正想要完成的操作。

public void listBox1_MouseDown(object sender, MouseEventArgs e)
{
    Clipboard.SetText("<#KEYWORD#>");
    IDataObject dObject = Clipboard.GetDataObject();

    //This is extremely buggy coming from VSTO, this is why the clipboard is used.
    DoDragDrop(dObject, DragDropEffects.All);
}

void Application_WindowSelectionChange(Microsoft.Office.Interop.Word.Selection Sel)
{
    if (Sel.Range.Text == "<#KEYWORD#>")
    {
        Sel.Range.Text = string.Empty;
        // Do some action
    }
}

答案 1 :(得分:1)

在Word 2011 for Mac中也发生了doc和docx文件 游标的标题和工件的可视复制也存在问题。前两个问题是2007年的Windows已知问题。