プロが教える店舗&オフィスのセキュリティ対策術

こんにちは,いつもお世話になっています.

C#を用いて,ローカルに保存したhtmlファイルをwebBrowserで表示し,
そこに表示されたテキストの一部をマウスで選択してボタンアクションで取得するような機能を実現したいと考えています.

現在WebBrowser.Document.Body.InnerText.Substring(int, int)を使用して選択された文字列を取得しようと考えているのですが,
ブラウザで表示されているテキストにはtextBoxでいうところのselectionStartsやselectionLengthのようなプロパティがありません.
どのようにしたら可能になるでしょうか.

もちろん目的の機能が実現できるならば上記の方法にこだわるつもりはありません.
他に何か方法がありそうでしたらそちらも教えていただけないでしょうか.

プログラミング初心者ですので質問の仕方に至らない部分があるとは思いますが,
どうぞよろしくお願いいたします.

A 回答 (1件)

'VB.NETで書いているが,使っているクラスやらメソッドやらは同じなので


'C#やってれば大体想像が付くはず。
'VB.NETで使っているDirectCastは普通にキャストしてくれ。

'なお,
'[.NET]タブから
'System
'System.Windows.Forms(Formや各種コントロールのため)
'System.Drawing (Sizeクラスのため)
'を,
'[COM]タブから
'Microsoft HTML Object Library 【重要】
'を読み込む必要があるので注意

Namespace Q3475698
Public Class Q3475698A
Shared Sub Main

Dim Form1 As New Q3475698B
Form1.ShowDialog


End Sub


End Class
Public Class Q3475698B
Inherits System.Windows.Forms.Form
Private Webbrowser1 As System.Windows.Forms.WebBrowser
Private TextBox1 As System.Windows.Forms.TextBox
Private Button1 As System.Windows.Forms.Button

Sub New

Webbrowser1 = New System.Windows.Forms.WebBrowser
TextBox1 = New System.Windows.Forms.TextBox
Button1 = New System.Windows.Forms.Button

Me.Size = New System.Drawing.Size(800,600)
With Webbrowser1
.Left = 0
.Top = 0
.Size = New System.Drawing.Size(800,550)
End With
With TextBox1
.Left = 0
.Top = 550
.Size = New System.Drawing.Size(600,20)
End With
With Button1
.Left = 600
.Top = 550
.Size = New System.Drawing.Size(200,20)
End With

Me.Controls.AddRange(New System.Windows.Forms.Control(){Webbrowser1,TextBox1,Button1})
AddHandler Button1.Click,AddressOf OnButton1_Click

Webbrowser1.Navigate("http://www.google.co.jp/")





End Sub

Private Function OnButton1_Click() As Boolean

TextBox1.Text = GetSelectionText()
Return True

End Function

Public Function GetSelectionText() As String

'MSの資料
'http://msdn2.microsoft.com/en-us/library/aa76884 …
'を見ると,createRangeメソッドはControlRangeであることもあるらしいが,俺は良く解らんのでのでそこら辺は自分で調べて頑張れ。
Dim Range As mshtml.IHTMLTxtRange = DirectCast(DirectCast(Webbrowser1.Document.DomDocument, mshtml.IHTMLDocument2).selection.createRange, mshtml.IHTMLTxtRange)
Return Range.text
End Function


End Class

End Namespace
    • good
    • 0
この回答へのお礼

himajin100000 様

お返事ありがとうございます.
ここまで丁寧に回答をしていただき非常にうれしく思います.
私も他の人にアドバイスできるよう精進したいと思います.

お礼日時:2007/11/01 14:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!