お気に入り

タグの編集
投稿者 ともや  (高校生) 投稿日時 2010/8/15 16:11:24
WebBrowserに表示されてあるサイトをリストボックスに登録したいのですがどのようにすればいいでしょうか?

お気に入りに登録ボタンを押したらリストボックスにサイトのタイトル名が入ってそれをクリックしたら
そのサイトにいけるようにしたいです。

お願いします
投稿者 トマト  (中学生) 投稿日時 2010/8/16 18:14:01
1.お気に入りの情報を入れる(URIと名前)クラスを作る
2.リストボックスのDisplayMemberを名前を表すプロパティの名前にする
3.登録ボタンが押されたらインスタンスを作成してリストボックスに追加するようにする
4.リストボックスがクリックされたらWebBrowser.Navigate(ListBox.SelectedItem.Title)みたいな感じで表示させる

こんな感じですか?
投稿者 るきお  (社会人) 投稿日時 2010/8/16 19:59:24
こんにちは。

やりたいことがちょっとわからないのですが、

①お気に入りに登録」というボタンがあって、それをクリックしたら、IEなどで使用するお気に入りの一覧をリストボックスに表示する。リストボックスに表示するのはサイトのタイトル。
②リストボックスで項目をクリックすると、その項目のサイトが表示される
ということでよいでしょうか?

お気に入りはフォルダーを作って管理できるので階層構造になっています。一方リストボックスは階層構造になっていないのでお気に入りをリストボックスで表現するのは無理があります。

仮にフラットに表示すればよいとすれば次のようにして表示できます。
この例ではサイトのタイトルだけでなく、URLも並べて表示しています。
 
    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click

        Dim bookmarks = GetBookmarks()

        ListBox1.Items.Clear()
        For Each title In bookmarks.Keys
            Dim url = bookmarks(title)
            ListBox1.Items.Add(title & " - " & url)
        Next

    End Sub

    Public Function GetBookmarks() As Dictionary(Of StringString)

        'お気に入りの階層を無視してフラットにお気に入りを取得する例 
        Dim results As New Dictionary(Of StringString)
        Dim path As String = Environment.GetFolderPath(Environment.SpecialFolder.Favorites)

        For Each fileName As String In IO.Directory.GetFiles(path, "*.url", IO.SearchOption.AllDirectories)
            Dim title As String = IO.Path.GetFileNameWithoutExtension(fileName)
            Dim lines As String() = IO.File.ReadAllLines(fileName)
            Dim url As String = lines.First(Function(line) line.StartsWith("URL="))

            results(title) = Replace(url, "URL=""")
        Next

        Return results

    End Function


タイトルだけを表示し、クリックするとそのサイトに飛べるようにするには次のようにします。
 
    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click

        ListBox1.Items.AddRange(GetBookmarks.ToArray)

    End Sub

    Public Function GetBookmarks() As List(Of WebSiteLink)

        'お気に入りの階層を無視してフラットにお気に入りを取得する例 
        Dim results As New List(Of WebSiteLink)
        Dim path As String = Environment.GetFolderPath(Environment.SpecialFolder.Favorites)

        For Each fileName As String In IO.Directory.GetFiles(path, "*.url", IO.SearchOption.AllDirectories)
            Dim title As String = IO.Path.GetFileNameWithoutExtension(fileName)
            Dim lines As String() = IO.File.ReadAllLines(fileName)
            Dim url As String = lines.First(Function(line) line.StartsWith("URL="))
            Dim link As New WebSiteLink With {.Title = title, .URL = Replace(url, "URL=""")}
            results.Add(link)
        Next

        Return results

    End Function

    Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button2.Click

        Dim bookmarks = GetBookmarks()

        ListBox1.Items.Clear()
        For Each bookmark In bookmarks

            ListBox1.Items.Add(bookmark)
        Next

    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Dim link As WebSiteLink = ListBox1.SelectedItem
        Process.Start(link.URL.ToString)
    End Sub

    Public Class WebSiteLink
        Public Title As String
        Public URL As String

        Public Overrides Function ToString() As String
            Return Title
        End Function
    End Class
投稿者 るきお  (社会人) 投稿日時 2010/8/16 20:05:01
下の例のGetBookmarksメソッド内のFor Eachはもっと簡単に次のように書いてもOKでした。
For Each fileName As String In IO.Directory.GetFiles(path, "*.url", IO.SearchOption.AllDirectories)
    Dim title As String = IO.Path.GetFileNameWithoutExtension(fileName)
    Dim link As New WebSiteLink With {.Title = title, .URL = fileName}
    results.Add(link)
Next
投稿者 るきお  (社会人) 投稿日時 2010/8/16 20:06:35
ちょこまかと失礼します。

さらに、Button2_Clickは不要です。上の投稿ではコピペしたときにテスト用につくったButton2_Clickがまざってしまいました。