繁体   English   中英

C#取消选择COMobject WordDocument

[英]C# Deselect COMobject WordDocument

在Visual Studio中,我创建了Word 2016 Document项目。 在此文档中,我添加了一个自定义ActionsPane控件。 该控件唯一要做的就是向活动文档中添加一个PlainTextContentControl。

if (Globals.ThisDocument.Content.Application.ActiveDocument == null) return;
        var tagControl = Globals.ThisDocument.Controls.AddPlainTextContentControl(Guid.NewGuid().ToString());
tagControl.PlaceholderText = @"PLACEHOLDER";
tagControl.LockContents = true;

一切正常,在Word文档中添加并选择了plaintextcontrol。 但是我想要的是添加了控件,并且光标将跳到控件的末尾,因此用户可以直接开始键入。 新添加的控件将自动选择。 我该如何解决?

我已经尝试过:

var range = Globals.ThisDocument.Content;
range.Application.Selection.Collapse();

有人可以帮我从这里出去吗? 谢谢。

编辑:Als尝试此解决方案。

private static IntPtr documentHandle;
        public delegate bool EnumChildProc(IntPtr hwnd, int lParam);

        [DllImport("user32.dll")]
        public static extern System.IntPtr SetFocus(System.IntPtr hWnd);
        [DllImport("user32.dll")]
        public static extern int EnumChildWindows(IntPtr hWndParent, EnumChildProc callback, int lParam);
        [DllImport("user32.dll")]
        public static extern int GetWindowText(IntPtr hWnd, StringBuilder title, int count);

        private static bool EnumChildWindow_Handle(IntPtr handle, int lparam)
        {
            StringBuilder s = new StringBuilder(50);
            GetWindowText(handle, s, 50);
            Debug.WriteLine(s.ToString());
            if (s.ToString() == "Microsoft Word-document")
            {
                documentHandle = handle;
            }
            return true;
        }

 private void MoveCursorToEndOfLastAddedTag(PlainTextContentControl ctrl)
        {
            EnumChildProc EnumChildWindow = new EnumChildProc(EnumChildWindow_Handle);
            EnumChildWindows(Process.GetCurrentProcess().MainWindowHandle, EnumChildWindow, 0);
            SetFocus(documentHandle);
}

这也不起作用。

终于我成功了。 这不是最干净的方法,但它就像一种魅力。 我编写的唯一代码是这样的:

private void MoveCursorToEndOfLastAddedTag(PlainTextContentControl ctrl)
{
    System.Windows.Forms.SendKeys.Send("{F10}");
    System.Windows.Forms.SendKeys.Send("{F10}");
    System.Windows.Forms.SendKeys.Send("{RIGHT}");
}

它发送2次F10键。 第一次将焦点设置为功能区,第二次将焦点重新分配给文档。 使用右键,我从PlainTextContentControl中删除选择。

谢谢大家的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM