C# 如何保存和恢复WebBrowser控件的选择?

C# 如何保存和恢复WebBrowser控件的选择?,c#,winforms,webbrowser-control,C#,Winforms,Webbrowser Control,我正在使用Windows.Forms.WebBrowser控件作为文本编辑器。为了改变某些选定文本的字体大小,我显示了一个模式窗口,用户可以在该窗口中对字体大小进行调整,关闭该窗口后,先前选定的文本将被修改。不幸的是,模式窗口一打开,主窗口中的选择就不再可见,我无法找到保存和恢复它的方法。我可以使用 IHTMLDocument2 htmlDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument; IHTMLSelect

我正在使用Windows.Forms.WebBrowser控件作为文本编辑器。为了改变某些选定文本的字体大小,我显示了一个模式窗口,用户可以在该窗口中对字体大小进行调整,关闭该窗口后,先前选定的文本将被修改。不幸的是,模式窗口一打开,主窗口中的选择就不再可见,我无法找到保存和恢复它的方法。我可以使用

    IHTMLDocument2 htmlDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument;
    IHTMLSelectionObject currentSelection = htmlDocument.selection;
但是由于
htmlDocument.selection
是只读的,因此在模式关闭后我无法设置它。我所能做的就是在主窗口上调用
Select()
,但是插入符号跳到文本的末尾,没有选择任何内容

有什么办法解决这个问题吗?
(我知道我可以使用组合框来改变字体大小,但出于某些原因,我需要自定义窗口。)

您可以使用书签。将所选内容另存为书签:

var bookmark = document.selection.createRange().getBookmark();
恢复:

var range = document.selection.createRange();
range.moveToBookmark(bookmark);
range.select();

在启动对话框的代码中,是否可以在打开窗口之前确定更改的位置并将其保存在某个位置。然后让关闭对话框的回调读取存储位置并提交更改。Internet Explorer中的内置编辑器功能非常臭名昭著。MSDN论坛反复尝试驯服它,但总是惨败。好主意,好工作。createRange的结果必须强制转换为“IHTMLTxtRange”才能使用书签方法。不幸的是,在某些情况下,我在尝试还原书签时遇到一个COMException,错误代码为-2147467259。