【C#】HTMLエディタを作る(2chまとめツール作成記)
前回からの続きです。
allthewayfrom.hatenablog.com
まとめツールを作る上で欲しい機能の一つがHTMLエディタ(ソースの編集でなくHTML表示上での直接編集)でした。
.Netのコントロールにはないので、最初はRichTextBoxを利用してそのフォーマットをHTMLに変換?なんてことも考え、変換を行っているサンプルコードも見かけたのですがフォーマットがややこしく結構面倒な感じがしたため挫折。
そんな中色々調べていると、HtmlDocument(WebBrowserのDocument)で、エレメントの属性にcontenteditable = trueを設定すると、なんと編集モードに出来ることを知ります。
(知ってる方からしたら常識だったかもしれませんが・・・)
おお!これだけで、文字の編集、改行まで出来るので第1関門クリア。
ここまできたら次に実現したいのは、やはり選択範囲の文字の装飾です。
まず選択範囲を取得するためには、.NetのHtmlDocumentやHtmlElementの中まで見る必要があるため、参照設定でmshtmlのCOMの参照を追加し、HtmlDocument.DomDocumentをIHTMLDocument2にキャストしてアクセスします。
IHTMLDocument2が、選択範囲をもつselectionをメンバで持っているため、selection.createRange()で選択範囲まで取ることができます。
あとは、その前後にpasteHTML()でタグを追加することで選択範囲をタグで囲むことが出来ました!
以下サンプルコードです。ご参考までに。。
IHTMLDocument2 htmlDoc = WebBrowser.Document.DomDocument as IHTMLDocument2;
IHTMLTxtRange txtRange = htmlDoc.selection.createRange();
txtRange.collapse();
txtRange.pasteHTML("開始タグ");
txtRange = htmlDoc.selection.createRange();
txtRange.collapse(false);
txtRange.pasteHTML("終了タグ");
大分機能が充実してきました。
「まとめくす」との差別化として、レス選択画面でレス内容直接編集が出来るようにしてみました。
特定の文字の太さや色を変えたいときに便利です!