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

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

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

Re[6]: WebBrowserコントロールで選択したファイル情報


(過去ログ 93 を表示中)

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

■55470 / inTopicNo.1)  WebBrowserコントロールで選択したファイル情報
  
□投稿者/ やんまー (31回)-(2010/12/03(Fri) 01:57:34)

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

画像ファイルを簡単に管理する方法を模索していたら、こんな情報を見つけました。


エクスプローラの縮小版表示を簡単に行う方法(VB.NET,C#)
http://d.hatena.ne.jp/CoolMint/20100522/1274495649

たしかに、簡単にフォルダ内の画像が縮小表示することができました。

で、これらのファイルを選択したときに、そのファイ上方を取得する方法ってあるのでしょうか???

クリックしたファイルの情報(ファイルパス)を取れればいろいろできそうだと思ったのですが・・・
引用返信 編集キー/
■55475 / inTopicNo.2)  Re[1]: WebBrowserコントロールで選択したファイル情報
□投稿者/ 魔界の仮面弁士 (1971回)-(2010/12/03(Fri) 10:07:56)
No55470 (やんまー さん) に返信
> これらのファイルを選択したときに、そのファイ上方を取得する方法ってあるのでしょうか???

できますよ。ShellFolderView オブジェクトの SelectedItems メソッド & FocusedItem プロパティですね。
FocusedItem はフォーカスがあるアイテムを返しますが、これは選択状態とは無関係です。
この他、SelectionChanged イベントなんてものもあります。
http://msdn.microsoft.com/en-us/library/bb773938.aspx

Dim lst As New List(Of String)()

'ShellFolderView
Dim doc As Object = Me.WebBrowser1.ActiveXInstance.Document

'Folder
Dim fld As Object = doc.Folder

'FolderItems
Dim items As Object = doc.SelectedItems

For n As Integer = 0 To items.Count - 1
    'FolderItem
    Dim fi As Object = items.Item(CObj(n))

    lst.Add(fi.Path)
    For column As Integer = -1 To 8
        lst.Add(" 『" & fld.GetDetailsOf(fi, column) & "』")
    Next
Next

Label1.Text = Join(lst.ToArray(), vbNewLine)

引用返信 編集キー/
■55740 / inTopicNo.3)  Re[2]: WebBrowserコントロールで選択したファイル情報
□投稿者/ やんまー (32回)-(2010/12/13(Mon) 01:52:23)
魔界の仮面弁士さま

お返事が遅くなってしまい申し訳ありませんでした!

教えていただいた方法でうまく取得することができました。

ただ、「クリックされた」というイベントを拾うことはできないのでしょうか・・・

# そのイベントは必須ではないのですが、できるのかな・・・と疑問に思いまして・・・
引用返信 編集キー/
■55741 / inTopicNo.4)  Re[3]: WebBrowserコントロールで選択したファイル情報
□投稿者/ 魔界の仮面弁士 (1982回)-(2010/12/13(Mon) 02:05:46)
No55740 (やんまー さん) に返信
> ただ、「クリックされた」というイベントを拾うことはできないのでしょうか・・・
SelectionChanged イベントで代用できませんか?

> # そのイベントは必須ではないのですが、できるのかな・・・と疑問に思いまして・・・
キー操作では反応させず、マウス操作だけを拾いたいのであれば、
DirectInput を併用するという選択肢もあります。
引用返信 編集キー/
■55896 / inTopicNo.5)  Re[4]: WebBrowserコントロールで選択したファイル情報
□投稿者/ やんまー (33回)-(2010/12/17(Fri) 16:31:19)
魔界の仮面弁士 さま

レス、ありがとうございます。

実はうーんどういう事だろう・・・と思っておりました。


> SelectionChanged イベントで代用できませんか?

そもそもこれはどうやって書いたらいいのでしょうか。

ぼくはいつも
例えば、ボタンだったら
「プロパティ」「イベント」「Click」
を選んで、コード自動生成されるのを使っていました。


↑で教えていただいたコードを試した方法は、
ボタンをひとつ作って、そのclickイベントの中に書いてみました。これで、うまく取得できました。

しかし
ShellFolderView オブジェクトのSelectionChangedイベント。。。というので固まってしまいまいした 汗

調べてはみたのですが、あまりにもあっさりと書かれており理解できませんでした。

http://msdn.microsoft.com/en-us/library/bb774045%28v=VS.85%29.aspx

このへんに魔界の仮面弁士 さまの書き込みも見つけまして
多分これに近い話なのかなあ・・とは思っていますが・・・。
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=214



No55741 (魔界の仮面弁士 さん) に返信
> ■No55740 (やんまー さん) に返信
>>ただ、「クリックされた」というイベントを拾うことはできないのでしょうか・・・
> SelectionChanged イベントで代用できませんか?
>
>># そのイベントは必須ではないのですが、できるのかな・・・と疑問に思いまして・・・
> キー操作では反応させず、マウス操作だけを拾いたいのであれば、
> DirectInput を併用するという選択肢もあります。
引用返信 編集キー/
■55908 / inTopicNo.6)  Re[5]: WebBrowserコントロールで選択したファイル情報
□投稿者/ 魔界の仮面弁士 (1991回)-(2010/12/17(Fri) 19:01:53)
No55896 (やんまー さん) に返信
>>SelectionChanged イベントで代用できませんか?
> そもそもこれはどうやって書いたらいいのでしょうか。

レイトバインドだと面倒そうなので、タイプライブラリを用いる方法でのサンプルです。
参照設定で、COM の [Microsoft Shell Controls And Automation] を加えておいてください。

Imports System.Runtime.InteropServices
Public Class Form1
    'WithEvents にはしない
    Private FolderView As Shell32.ShellFolderView

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        ListBox1.Items.Clear()
        ListBox2.Items.Clear()
        WebBrowser1.Navigate(TextBox1.Text)
    End Sub

    Private Sub FolderView_SelectionChanged()
        Dim fld As Shell32.Folder = FolderView.Folder

        'ListBox1 に「FocusedItem」を取得
        ListBox1.BeginUpdate()
        ListBox1.Items.Clear()
        Dim focusedItem As Shell32.FolderItem = FolderView.FocusedItem()
        ListBox1.Items.Add(focusedItem.Path)
        For column As Integer = 0 To 63
            Dim title As String = fld.GetDetailsOf(fld, column)
            If String.IsNullOrEmpty(title) Then
                Continue For
            End If
            ListBox1.Items.Add(" " & title)
            ListBox1.Items.Add("  " & fld.GetDetailsOf(focusedItem, column))
        Next
        Marshal.FinalReleaseComObject(focusedItem)
        ListBox1.EndUpdate()

        'ListBox2 に「SelectedItems」を取得
        ListBox2.BeginUpdate()
        ListBox2.Items.Clear()
        Dim selectedItems As Shell32.FolderItems = FolderView.SelectedItems()
        ListBox2.Items.Add(String.Format("{0:#,0}個のアイテムが選択されています。", selectedItems.Count))
        For n As Integer = 0 To selectedItems.Count - 1
            Dim fi As Shell32.FolderItem = selectedItems.Item(n)
            ListBox2.Items.Add(fi.Path)
            Marshal.FinalReleaseComObject(fi)
        Next
        Marshal.ReleaseComObject(selectedItems)
        ListBox2.EndUpdate()

        Marshal.ReleaseComObject(fld)
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        WebBrowser1.ScriptErrorsSuppressed = True
        WebBrowser1.AllowWebBrowserDrop = False
        WebBrowser1.AllowNavigation = True
        ListBox1.Items.Add("フォーカスのあるアイテム")
        ListBox2.Items.Add("選択されているアイテム")

        TextBox1.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)
        Button1.Text = "移動"
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, _
        ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        If FolderView IsNot Nothing Then
            RemoveHandler FolderView.SelectionChanged, AddressOf FolderView_SelectionChanged
            If Marshal.IsComObject(FolderView) Then
                Marshal.ReleaseComObject(FolderView)
            End If
            FolderView = Nothing
        End If
        Dim doc As Object = Nothing
        Try
            doc = WebBrowser1.ActiveXInstance.Document
            FolderView = TryCast(doc, Shell32.ShellFolderView)
            AddHandler FolderView.SelectionChanged, AddressOf FolderView_SelectionChanged
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            If doc IsNot Nothing AndAlso FolderView Is Nothing Then
                If Marshal.IsComObject(doc) Then
                    Marshal.ReleaseComObject(doc)
                End If
            End If
        End Try
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, _
        ByVal e As FormClosingEventArgs) Handles Me.FormClosing
        If FolderView IsNot Nothing Then
            If Marshal.IsComObject(FolderView) Then
                Marshal.ReleaseComObject(FolderView)
            End If
        End If
    End Sub
End Class

引用返信 編集キー/
■55909 / inTopicNo.7)  Re[6]: WebBrowserコントロールで選択したファイル情報
□投稿者/ やんまー (34回)-(2010/12/17(Fri) 19:06:08)
2010/12/27(Mon) 14:02:44 編集(投稿者)
2010/12/20(Mon) 13:06:55 編集(投稿者)

魔界の仮面弁士 さま

ありがとうございました。

サンプル、バッチリ動作いたしました!


Private FolderView As Shell32.ShellFolderView

としておいて

Private Sub FolderView_SelectionChanged()

とすればイベントとして処理されるという寸法なのですね?!

もうすこしいじって勉強させてもらおうと思います。


ありがとうございました!
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -