|
魔界の仮面弁士様より頂いたサンプルを参考に、
以下のようなコードで希望通りの動作を実現できました。
ありがとうございました。
なお、今回は別PCでも動作を試したいので、mshtmlの参照は行わず、
DOMに関するオブジェクトにはすべてObject型の変数を使用しましたが、
この場合、何か気をつけなければならない点はあるでしょうか?
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim doc As Object = WebBrowser1.Document.DomDocument
Dim wkRange As Object
Select Case LCase(doc.selection.type)
Case "none"
MsgBox("未選択")
Return
Case "control"
MsgBox("ControlRangeCollection")
Return
Case Else 'text
End Select
'現在の選択位置を表す TextRange
Dim selRange As Object = doc.selection.createRange()
'選択開始位置の親要素
wkRange = selRange.duplicate()
wkRange.collapse(True)
Dim startElement As Object = wkRange.parentElement()
'選択終了位置の親要素
wkRange = selRange.duplicate()
wkRange.collapse(False)
Dim endElement As Object = wkRange.parentElement()
'範囲の指定
Dim body As Object = doc.body
wkRange = body.createTextRange()
wkRange.moveToElementText(startElement)
selRange.setEndPoint("StartToStart", wkRange)
wkRange.moveToElementText(endElement)
selRange.setEndPoint("EndToEnd", wkRange)
'改行の変換
Dim strHtml As String = Regex.Replace("" & selRange.htmlText, "</p>\s*<p(\s+[^>]*)?>", "<br>", RegexOptions.IgnoreCase)
'System.Text.RegularExpressionsはインポート済み
selRange.select()
selRange.pasteHTML(strHtml)
End Sub
|