C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: WebBrowserを使用したエディターでの文字位置取得


(過去ログ 123 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■73247 / inTopicNo.1)  WebBrowserを使用したエディターでの文字位置取得
  
□投稿者/ タッチ (14回)-(2014/09/02(Tue) 15:27:24)

分類:[VB.NET/VB2005 以降] 

No73148 他でWebBrowserを使用したエディターについて質問したタッチと申します。
(WebBrowserのDomDocument.designMode = "On"にしたWebBrowserを使用・開発言語:VB2008)

さて、このエディター上のbodyの内容が以下のようであったとします。

<body>
<p>これは動物です。</p>
<p>これは哺乳類です。</p>
<p><span class="xxx">トカゲ</span>は哺乳類ではありません。</p>
</body>

例えば、3行目の「哺乳類」の文字の部分が選択された時、
選択された「哺乳類」の文字が、いわゆるbodyのInnerTextで何文字目にあたるかを知りたいのですが、
どうすればよいでしょうか?
選択箇所のTextRangeを利用することになろうかと思いますが、
位置関係をどのように求めればいいのか分かりません。

ちなみに、この例だと、改行を1文字と数えた場合には、24文字目
(0から始まるインデックスとして見れば23)となります。

どうぞよろしくお願いします。
引用返信 編集キー/
■73275 / inTopicNo.2)  Re[1]: WebBrowserを使用したエディターでの文字位置取得
□投稿者/ タッチ (15回)-(2014/09/05(Fri) 15:50:37)
自己レスです。
色々と調べた結果、以下のようなコードを書くことにより、
選択文字の位置(0から始まるインデックス)を得ることができました。

Dim doc As Object = WebBrowser1.Document.DomDocument
Dim body As Object = doc.body
Dim rng As Object = body.createTextRange()
Dim selrng as Object = doc.selection.createRange()
rng.setEndPoint("EndToEnd", selrng)
Dim top2selText As String = rng.text
Dim selText As String = selrng.text
Dim idx As Integer = top2selText.Length - selText.Length

参考URL: http://msdn.microsoft.com/en-us/library/ie/ms536745(v=vs.85).aspx

なお、当初は改行は1文字で判断しようと思っていましたが、
その際にはCR+LFをLFに変換するなどの方法で対応しようと思います。

お騒がせしました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -