webbrowserコントロールでHTMLを含めた正確な選択範囲を取得するには?

解決


どま  2008-05-19 21:26:09  No: 139742  IP: 192.*.*.*

開発環境:Visual Studio 2008 Express(.NET2〜3.5かな)

webbrowserコントロールを利用して、簡単なHTMLエディタを作っています。
ExecCommandを使って太字・斜体・アンダーラインなどの編集ボタンは作れました。

それらと同じように動作する(トグルできる)取り消し線やCENTERタグなどを挿入する編集ボタンを作ろうとしています。

selection.createRange.HtmlTextで選択範囲を取得して、タグの挿入位置などで条件分岐をしたらいいかなぁとやってみたんですが、HtmlTextで返ってくる値は、例えば「123<DEL>456</DEL>789」で<DEL>から4までを範囲指定すると「<DEL>4</DEL>」と終了タグが補われています。

このためうまく条件分岐できないでいます。
HTMLを含めた正確な選択範囲を取得するには、どうしたらよいのでしょうか?
もしくは、編集ボタンを実現する方法があればご教示ください。

編集 削除
魔界の仮面弁士  2008-05-19 23:20:18  No: 139743  IP: 192.*.*.*

> webbrowserコントロールを利用して、簡単なHTMLエディタを作っています。
デザイナモードを使用している、という事なのかな?

Dim dom As Object = Nothing
Try
    dom = WebBrowser1.Document.DomDocument
    MsgBox(CallByName(dom, "designMode", CallType.Let, "on"))
Finally
    If dom IsNot Nothing AndAlso System.Runtime.InteropServices.Marshal.IsComObject(dom) Then
        System.Runtime.InteropServices.Marshal.ReleaseComObject(dom)
    End If
End Try
WebBrowser1.Document.Body.SetAttribute("contenteditable", "true")

> ExecCommandを使って太字・斜体・アンダーラインなどの編集ボタンは作れました。
ExecCommand メソッドを使っているのですよね。
であれば、取り消し線なども同じ事なのでは?
http://msdn.microsoft.com/ja-jp/library/cc392410.aspx
http://msdn.microsoft.com/en-us/library/ms533049.aspx
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.htmldocument.execcommand.aspx

> (トグルできる)取り消し線
StrikeThrough コマンドで良いのでは? トグル動作にもなりますし。

WebBrowser1.Document.ExecCommand("StrikeThrough", False, False)


現在の状態を知りたいなら、queryCommand系メソッドとか。

Dim dom As Object = Nothing
Try
    dom = WebBrowser1.Document.DomDocument
    MsgBox(CallByName(dom, "queryCommandValue", CallType.Method, "StrikeThrough"))
Finally
    If dom IsNot Nothing AndAlso System.Runtime.InteropServices.Marshal.IsComObject(dom) Then
        System.Runtime.InteropServices.Marshal.ReleaseComObject(dom)
    End If
End Try


> CENTERタグ
JustifyCenter / JustifyLeft / JustifyRight コマンドを使ってみるとか。

編集 削除
どま  2008-05-20 20:29:39  No: 139744  IP: 192.*.*.*

魔界の仮面弁士さん、ありがとうございます。
ご推察のとおり、デザイナーモードでの話です。

StrikeThroughコマンド・・・普段<DEL>で書く癖があるので気がつきませんでした(汗

取り消し線以外にも、DIVタグとかも作りたいなぁと考えてます。
CENTERタグも、JustifyだとPタグが挿入されるので・・・。

queryCommand系メソッドって、コマンド識別子一覧にあるものだけですよね?
他のタグにも使用する方法がありますか?
試してみたいと思います。

編集 削除
どま  2008-05-25 20:51:25  No: 139745  IP: 192.*.*.*

>HTMLを含めた正確な選択範囲を取得
これ自体は、クリップボードを使って

WebBrowser1.Document.ExecCommand("Copy", False, 0)
Clipboard.GetText(TextDataFormat.Html)

クリップボードデータをHTMLフォーマットで取得し、StartSelectionとEndSelectionをつかって、Substringで取り出すことができました。

というわけで、一応解決をつけておきますが、結局のところトグルボタンはまだ実装できてません・・・

編集 削除