C# 取消选择 COMobject WordDocument
C# Deselect COMobject WordDocument
在 Visual Studio 中,我创建了一个 Word 2016 文档项目。在本文档中,我添加了一个自定义的 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文档中添加并选中了明文控件。但我想要的是添加控件并且光标将跳到控件的末尾,以便用户可以直接开始键入。自动选择新添加的控件。我怎样才能把它变成?
我已经试过了:
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 中删除了选择。
谢谢大家的帮助。
在 Visual Studio 中,我创建了一个 Word 2016 文档项目。在本文档中,我添加了一个自定义的 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文档中添加并选中了明文控件。但我想要的是添加控件并且光标将跳到控件的末尾,以便用户可以直接开始键入。自动选择新添加的控件。我怎样才能把它变成?
我已经试过了:
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 中删除了选择。
谢谢大家的帮助。