あらかじめ日記

2chまとめサイト「ソノウソホント?」の雑記と、ブログで使えるスクリプトとかテクニックとか。その他、音楽やアニメ、漫画の話題とかも。

まとめサイト「ソノウソホント?」と「ムードもりあげ楽団」はこちら。

【C#】HTMLエディタを作る(2chまとめツール作成記)

前回からの続きです。

allthewayfrom.hatenablog.com
まとめツールを作る上で欲しい機能の一つがHTMLエディタ(ソースの編集でなくHTML表示上での直接編集)でした。

 
.Netのコントロールにはないので、最初はRichTextBoxを利用してそのフォーマットをHTMLに変換?なんてことも考え、変換を行っているサンプルコードも見かけたのですがフォーマットがややこしく結構面倒な感じがしたため挫折

そんな中色々調べていると、HtmlDocument(WebBrowserのDocument)で、エレメントの属性にcontenteditable = trueを設定すると、なんと編集モードに出来ることを知ります。
(知ってる方からしたら常識だったかもしれませんが・・・)


おお!これだけで、文字の編集改行まで出来るので第1関門クリア


ここまできたら次に実現したいのは、やはり選択範囲の文字の装飾です。

まず選択範囲を取得するためには、.NetのHtmlDocumentHtmlElementの中まで見る必要があるため、参照設定でmshtmlCOMの参照を追加し、HtmlDocument.DomDocumentIHTMLDocument2にキャストしてアクセスします。

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("終了タグ");




大分機能が充実してきました。

「まとめくす」との差別化として、レス選択画面でレス内容直接編集が出来るようにしてみました。
特定の文字の太さや色を変えたいときに便利です!