以下は、リンク数を表示するやり方を、ListViewに変更して書いて見たもの。
行数をふるには、結局こちらの方が、TextBoxを使うよりスマートにできました。
※元になっているソースは@IThttp://www.atmarkit.co.jp/fdotnet/dotnettips/687nondispbrowser/nondispbrowser.htmlです。
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Me.Getlink(1)
Me.TabControl1.SelectedTab = Me.TabPage2
End Sub
''' <summary>
''' リンク抜き出しルーチン
''' </summary>
''' <param name="InorOut">1:内部リンク抜き出し 2:外部リンク抜き出し</param>
''' <remarks>InorOutに何も入っていなければ、内外のリンクを出力する</remarks>
Private Sub Getlink(ByVal InorOut As Integer)
'リンク抜き出し
'ListView1のColumnHeaderに 件数 アンカーテキスト URLを追加
'View は Details
'FullRowSelect は True
'GridLines は True
ListView1.Items.Clear() '初期化
Dim ndb As New NonDispBrowser
ndb.NavigateAndWait(Me.TextBox1.Text)
Dim doc As HtmlDocument = ndb.Document
Dim strDomain As String = doc.Domain.ToString ナビゲーションしているURLのドメインを取得
Dim i As Integer = 1 'リンク数
' リンク文字列とそのURLの列挙
For Each tage As HtmlElement In doc.GetElementsByTagName("A")
Dim href As String = tage.GetAttribute("HREF") ' HREF属性の値
Dim text As String = tage.InnerText ' リンク文字列
If (Not String.IsNullOrEmpty(href)) And (Not String.IsNullOrEmpty(text)) Then
text = text.Replace(vbCrLf, "") ' 改行文字の削除
'リストビューに追加する配列を作成
Dim line(2) As String
line(0) = i.ToString '行数
Select Case InorOut
Case 1 '内部リンク
'ドメインが含まれていれば 出力
If InStr(href, strDomain) <> 0 Then
line(1) = text 'アンカーテキスト
line(2) = href 'URL
Me.ListView1.Items.Add(New ListViewItem(line)) 'リストビューに追加
i = i + 1
End If
Case 2 '外部リンク
'ドメインが含まれていなければ 出力
If InStr(href, strDomain) = 0 Then
line(1) = text
line(2) = href
Me.ListView1.Items.Add(New ListViewItem(line))
i = i + 1
End If
Case Else 'すべてのリンク
line(1) = text
line(2) = href
Me.ListView1.Items.Add(New ListViewItem(line))
i = i + 1
End Select
End If
Next
End Sub
|