メニューについて

タグの編集
投稿者 ともや  (高校生) 投稿日時 2011/7/16 22:50:29
ToolStripを配置しDropDownButtonを作りますそれをクリックしたらIEのお気に入りが
表示されるようにしたいです。
そのような方法はどのようにすればいいでしょうか??
投稿者 shu  (社会人) 投稿日時 2011/7/16 23:46:33
お気に入り用MenuItemクラス
   Private Class FavoriteMenuItem
        Inherits ToolStripMenuItem

        Private Fullname As String

        Public Sub New(ByVal Fl As FileInfo)
            MyBase.New(Fl.Name.Replace(Fl.Extension, ""))
            Fullname = Fl.FullName
            AddHandler Click, AddressOf ClickFavorite
        End Sub

        Private Sub ClickFavorite(ByVal sender As Object, ByVal e As EventArgs)
            Process.Start(Fullname)
        End Sub

    End Class


ドロップダウンメニュー追加処理
        Dim dinf As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Favorites))

        For Each fl In dinf.GetFiles("*.url", SearchOption.AllDirectories)
            ToolStripSplitButton1.DropDownItems.Add(New FavoriteMenuItem(fl))
        Next
投稿者 ともや  (高校生) 投稿日時 2011/7/17 10:44:55
ありがとうございます。
出来ました!!

あの=クリックしたらIEがひらいてしまうのですがWebBrowserで開くにはどうしたらいいでしょうか?
投稿者 O-157  (その他) 投稿日時 2011/7/17 15:02:55
FullnameをURLにして
            Fullname = Fl.FullName

            Dim text As String = My.Computer.FileSystem.ReadAllText(Fl.FullName)
            Dim iti As Integer = text.LastIndexOf("URL=") + 4
            Dim Length As Integer = text.IndexOf(vbCrLf, iti) - iti
            If Math.Max(0, Length) = 0 Then
                Length = text.Length - iti
            End If
            URL = text.Substring(iti, Length)
にして
Process.Start(Fullname)をForm1.WebBrowser1.Url = New Uri(URL)
にしたらできました。読みにくくてすいません。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/7/17 15:12:37
WebBrowser で開くようにしてみました。

Imports System.IO
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.Runtime.InteropServices.ComTypes
Imports System.ComponentModel

Public Class Form1

    Private Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles MyBase.Load
        Dim dinf As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Favorites))

        For Each fl In dinf.GetFiles("*.url", SearchOption.AllDirectories)
            ToolStripSplitButton1.DropDownItems.Add(New FavoriteMenuItem(fl, AddressOf WebBrowser1.Navigate))
        Next
    End Sub

    Public Class FavoriteMenuItem
        Inherits ToolStripMenuItem

        Private Fullname As String
        Private url As Uri
        Private action As Action(Of Uri)

        Public Sub New(ByVal Fl As FileInfo, ByVal action As Action(Of Uri))
            MyBase.New(Fl.Name.Replace(Fl.Extension, ""))
            Fullname = Fl.FullName
            Me.action = action
            Dim o As Object = CreateObject("InternetShortcut")
            DirectCast(o, IPersistFile).Load(Fl.FullName, 0)
            Dim sb As New System.Text.StringBuilder()
            Dim url As String = Nothing
            DirectCast(o, IUniformResourceLocatorW).GetUrl(url)
            Me.url = New Uri(url)
            Marshal.ReleaseComObject(o)
            AddHandler Click, AddressOf ClickFavorite
        End Sub

        Private Sub ClickFavorite(ByVal sender As ObjectByVal e As EventArgs)
            If action IsNot Nothing Then
                action(Me.url)
            End If
        End Sub

        <ComImport()> _
        <InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _
        <Guid("CABB0DA0-DA57-11CF-9974-0020AFD79762")> _
        Private Interface IUniformResourceLocatorW
            <EditorBrowsable(EditorBrowsableState.Never)> Sub _SetUrl()
            Sub GetUrl(<Out(), MarshalAs(UnmanagedType.LPWStr)> _
                       ByRef ppszURL As String)
            <EditorBrowsable(EditorBrowsableState.Never)> Sub _InvokeCommand()
        End Interface
    End Class

End Class
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/7/17 15:38:33
ちなみにテキストとして直接読む場合は、対iniファイル用の手法を使った方が良いですよ。

最後の URL= 以降という条件だけで検索した場合、たとえば、
 「http://www.kanzaki.com/docs/html/dummy?URL=http%3A%2F%2Fexample.com%2F」
へのお気に入りを誤読してしまい、「http%3A%2F%2Fexample.com%2F」に化けてしまいます。

また、漢字等を含む URL に備えて文字コードも考慮する必要もあります。
最近のバージョンのインターネットショートカットでは、多言語対応のために
日本語を含んだ URL に対して、通常版、ANSI版、WIDE版という複数の URL が
一つのショートカット内に併記されています(WIDE 版は、UTF-7 で記録される)。
投稿者 ともや  (高校生) 投稿日時 2011/7/18 11:20:40
お二人ともご丁寧にありがとうございました!!
あの~いい機会なので聞かせてもらいます。
今、左隅にタブを配置してタブ1にWebBrowserを配置して、タブコントロールの隣にWebBrowser2を
配置しています。
WebBrowser1にお気に入りを表示することは出来ています。
サイトをクリックしたらWebBrowser2に表示される方法が分かりません。
わかる方よかったら教えていただけないでしょうか??
投稿者 まだまだ  (高校生) 投稿日時 2011/7/18 12:23:27
>サイトをクリックしたらWebBrowser2に表示される方法が分かりません。
これはWebBrowser1上のLinkをClickしたらLink先がWebBrowser2に表示されるという意味でしょうか。
それならばWebBrowser1のNavigatingEventでWebBrowser1のNavigatingをCancelした後、
CancelしたURLをWebBrowser2でNavigateしてやれば実現できるかと思います。
Private Sub WebBrowser1_Navigating(ByVal sender As ObjectByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
WebBrowser2.Navigate(e.Url)
e.Cancel = True
End Sub

こんな感じでしょうか?
日本語読みにくくてすみません。
投稿者 ともや  (高校生) 投稿日時 2011/7/18 15:07:55
WebBrowser1にIEのお気に入りを開いておきます。
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        WebBrowser1.Navigate(System.Environment.GetFolderPath(Environment.SpecialFolder.Favorites))

    End Sub


WebBrowser1にお気に入りが開かれていますので表示したいサイトをクリックまたはダブルクリック
したらWebBrowser2に表示されるよにしたいです。

日本語ヘタですみません