OpenFileDialog [Résolu]

Messages postés
78
Date d'inscription
samedi 12 avril 2003
Dernière intervention
19 juillet 2017
- - Dernière réponse : cs_DAN1
Messages postés
78
Date d'inscription
samedi 12 avril 2003
Dernière intervention
19 juillet 2017
- 12 mai 2017 à 16:05
Bonjour à tous.
Avec :openFileDialog1 je voudrais savoir comment procéder pour n'afficher que le répertoire et ses sous répertoire un peu comme sur la copie d'écran ci-dessous
que je realisais du temps de VB6 avec

drvdisque
dirlistbox
filelistbox

Actuellement j'affiche un explorateur Windows.
D'avance merci de votre aide.
Dan


--
Afficher la suite 

Votre réponse

8 réponses

0
Merci
bonjour,
c'est a dire "n'afficher que le répertoire et ses sous répertoire" ouvrir l'openfiledialog dans un dossier spécifique ?
Commenter la réponse de Rykudos
0
Merci
ou si tu cherche a sélectionner uniquement un dossier tu peut utiliser FolderBrowserDialog.
Commenter la réponse de Rykudos
Messages postés
78
Date d'inscription
samedi 12 avril 2003
Dernière intervention
19 juillet 2017
0
Merci
Bonjour Rykudos.
Merci de ta réponse en faite je voudrais pouvoir afficher sur ma forme la même présentation que j'ai indiquée ci-dessus en dure car je ne souhaite pas que ce menu directory répertoire fichier apparaisse au lancement de mon instruction openfiledialogue
je pouvais le faire avec VB 6
actuellement dans vb.net 2012 j'utilise listebox sans pouvoir indiquait les petites vignettes jaunes de ces répertoires.

en résumé je veux pouvoir indiquer uniquement un répertoire précis et ses sous répertoire qui me permettrait en cliquant dessus de développer les différents fichiers dopnc sans donner le choix des partitions et des autres repertoirs.
Ou bien d'indiquer une partition qui me permettrait de développer tous ces répertoires et tous ses sous répertoires…
si je lui indique seulement un répertoire je ne veux pouvoir développer que les sous répertoires de ce répertoire.
Si je lui indique une partition je peux alors sélectionner et indiquer tous les répertoires de cette partition avec la possibilité d'indiquer ou non toutes les partitions de mon disque dur.
D'abord je te remercie de ton aide





--
Commenter la réponse de cs_DAN1
0
Merci
tu souhaite configuré tous sa dans ton openfiledialog ou tu en développe un toi même ?
Commenter la réponse de Rykudos
Messages postés
5606
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Tu ne peux pas faire ce que tu veux avec l'openfiledialog!

Je te propose de mettre le répertoire que tu désires dans une TreeView qui t'affichera son arborescence.
Ensuite en cliquant dans cette arborescence sur un dossier tu auras les fichiers qui s'afficheront dans une ListView. Ouverture du fichier en cliquant dessus.
Il te faut une Treeview et une ListView et mettre ce code:

Imports System.IO
Public Class Form1
    Dim dossier As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ListView1.CheckBoxes = True
        ListView1.View = View.List
    End Sub
    'ouvrir un fichier
    Private Sub ListView1_Click(sender As Object, e As System.EventArgs) Handles ListView1.Click
        Dim nom As String
        nom = ListView1.SelectedItems.Item(0).Text
        Process.Start(dossier & "\" & nom)
    End Sub
    Private Sub PopulateTreeView()
        Dim rootNode As TreeNode
        Dim info As New DirectoryInfo("C:\Users\LePivert\Pictures") 'a adapter le répertoire
        If info.Exists Then
            rootNode = New TreeNode(info.Name)
            rootNode.Tag = info
            GetDirectories(info.GetDirectories(), rootNode)
            TreeView1.Nodes.Add(rootNode)
            TreeView1.ExpandAll()
        End If
    End Sub
    Private Sub GetDirectories(ByVal subDirs() As DirectoryInfo, ByVal nodeToAddTo As TreeNode)
        Dim aNode As TreeNode
        Dim subSubDirs() As DirectoryInfo
        Dim subDir As DirectoryInfo
        For Each subDir In subDirs
            aNode = New TreeNode(subDir.Name, 0, 0)
            aNode.Tag = subDir
            aNode.ImageKey = "folder"
            Try
                subSubDirs = subDir.GetDirectories()
            Catch e As UnauthorizedAccessException
                subSubDirs = Nothing
            End Try
            If Not subSubDirs Is Nothing Then
                If subSubDirs.Length <> 0 Then
                    GetDirectories(subSubDirs, aNode)
                End If
            End If
            nodeToAddTo.Nodes.Add(aNode)
        Next subDir
    End Sub
    Public Sub New()
        InitializeComponent()
        PopulateTreeView()
    End Sub
    'New
    Private Sub treeView1_NodeMouseClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
        Dim newSelected As TreeNode = e.Node
        ListView1.Items.Clear()
        Dim nodeDirInfo As DirectoryInfo = CType(newSelected.Tag, DirectoryInfo)
        Dim subItems() As ListViewItem.ListViewSubItem
        Dim item As ListViewItem = Nothing

        Dim dir As DirectoryInfo
        For Each dir In nodeDirInfo.GetDirectories()
            item = New ListViewItem(dir.Name, 0)
            subItems = New ListViewItem.ListViewSubItem() {New ListViewItem.ListViewSubItem(item, "Directory"), New ListViewItem.ListViewSubItem(item, _
                dir.LastAccessTime.ToShortDateString())}

            item.SubItems.AddRange(subItems)
            ListView1.Items.Add(item)

        Next dir
        Dim file As FileInfo
        For Each file In nodeDirInfo.GetFiles()

            item = New ListViewItem(file.Name, 1)

            subItems = New ListViewItem.ListViewSubItem() {New ListViewItem.ListViewSubItem(item, "File"), New ListViewItem.ListViewSubItem(item, _
                file.LastAccessTime.ToShortDateString())}

            item.SubItems.AddRange(subItems)
            ListView1.Items.Add(item)
            dossier = file.DirectoryName
        Next file
        ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
    End Sub
End Class



Commenter la réponse de cs_Le Pivert
Messages postés
78
Date d'inscription
samedi 12 avril 2003
Dernière intervention
19 juillet 2017
0
Merci
Bonjour Le Pivert et merci pour ta réponse.
J'aurais toutefois aimé avoir également les petites vignettes jaunes représentant le répertoire mais je peux tout à fait me contenter de cela c'est très intéressant et j'ai commencé hier soir à décortiquer ton code qui fonctionne parfaitement.
Bien à toi.
Dan

--
Commenter la réponse de cs_DAN1
Messages postés
5606
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
J'aurais toutefois aimé avoir également les petites vignettes jaunes représentant le répertoire

Pour faire cela il faut un control ImageList dans lequel tu mets 2 images:
0 dossier fermé
1 dossier ouvert

voici le projet complet, a toi de l'adapter:


http://www.cjoint.com/c/GEdixCOEbsQ
cs_DAN1
Messages postés
78
Date d'inscription
samedi 12 avril 2003
Dernière intervention
19 juillet 2017
-
merci
j'ai pu tout adapter
c'est vraiement super
cs_Le Pivert
Messages postés
5606
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
> cs_DAN1
Messages postés
78
Date d'inscription
samedi 12 avril 2003
Dernière intervention
19 juillet 2017
-
Rykudos a parlé d'associer les icônes des extensions de fichiers. Si cela t'interesse, il suffit d'ajouter une imageList avec ce code:

Option Strict On
Imports System.IO
Imports System.Runtime.InteropServices
Public Class Form1
#Region "Déclarations"
    'Icônes
    Private Structure SHFILEINFO
        Public hIcon As IntPtr            ' : icon
        Public iIcon As Integer           ' : icondex
        Public dwAttributes As Integer    ' : SFGAO_ flags
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _
        Public szDisplayName As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)> _
        Public szTypeName As String
    End Structure
    Private Declare Auto Function SHGetFileInfo Lib "shell32.dll" _
             (ByVal pszPath As String, _
              ByVal dwFileAttributes As Integer, _
              ByRef psfi As SHFILEINFO, _
              ByVal cbFileInfo As Integer, _
              ByVal uFlags As Integer) As IntPtr

    Private Const SHGFI_ICON = &H100
    Private Const SHGFI_SMALLICON = &H1
    Private Const SHGFI_LARGEICON = &H0    ' Large icon
    Dim nIndex As Integer
    Dim dossier As String
    Dim nom As String
#End Region
#Region "Ouverture"
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' ListView1.CheckBoxes = True
        ListView1.View = View.List
    End Sub
    'ouvrir image
    Private Sub ListView1_Click(sender As Object, e As System.EventArgs) Handles ListView1.Click
        nom = ListView1.SelectedItems.Item(0).Text
        Process.Start(dossier & "\" & nom)
    End Sub
    Private Sub PopulateTreeView()
        Dim rootNode As TreeNode
        Dim info As New DirectoryInfo("C:\Users\LePivert\Pictures") 'a adapter le répertoire
        If info.Exists Then
            rootNode = New TreeNode(info.Name)
            rootNode.Tag = info
            'rootNode.ForeColor = Color.Blue
            GetDirectories(info.GetDirectories(), rootNode)
            TreeView1.Nodes.Add(rootNode)
            TreeView1.ImageList = ImageListreeview 'affiche les icones
            TreeView1.ExpandAll()
        End If
    End Sub
    Private Sub GetDirectories(ByVal subDirs() As DirectoryInfo, ByVal nodeToAddTo As TreeNode)
        Dim aNode As TreeNode
        Dim subSubDirs() As DirectoryInfo
        Dim subDir As DirectoryInfo
        For Each subDir In subDirs
            aNode = New TreeNode(subDir.Name, 0, 0)
            aNode.Tag = subDir
            aNode.ImageKey = "folder"
            '  aNode.ForeColor = Color.Red
            Try
                subSubDirs = subDir.GetDirectories()
            Catch e As UnauthorizedAccessException
                subSubDirs = Nothing
            End Try
            If Not subSubDirs Is Nothing Then
                If subSubDirs.Length <> 0 Then
                    GetDirectories(subSubDirs, aNode)
                End If
            End If
            nodeToAddTo.Nodes.Add(aNode)
        Next subDir
    End Sub
    Public Sub New()
        InitializeComponent()
        PopulateTreeView()
    End Sub
    'New
    Private Sub treeView1_NodeMouseClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
        Dim hImgSmall As IntPtr  'La poignée de la liste d'images système.
        'Dim hImgLarge As IntPtr  
        Dim shinfo As SHFILEINFO
        shinfo = New SHFILEINFO()
        ListView1.SmallImageList = ImageList1
        'ListView1.LargeImageList = ImageList1
        shinfo.szDisplayName = New String(Chr(0), 260)
        shinfo.szTypeName = New String(Chr(0), 80)
        Dim newSelected As TreeNode = e.Node
        nIndex = 2
        ListView1.Items.Clear()
        Dim nodeDirInfo As DirectoryInfo = CType(newSelected.Tag, DirectoryInfo)
        Dim subItems() As ListViewItem.ListViewSubItem
        Dim item As ListViewItem = Nothing
        Dim dir As DirectoryInfo
        For Each dir In nodeDirInfo.GetDirectories()
            item = New ListViewItem(dir.Name, 0)
            subItems = New ListViewItem.ListViewSubItem() {New ListViewItem.ListViewSubItem(item, "Directory"), New ListViewItem.ListViewSubItem(item, _
                dir.LastAccessTime.ToShortDateString())}
            item.SubItems.AddRange(subItems)
            ListView1.Items.Add(item)
        Next dir
        Dim file As FileInfo
        For Each file In nodeDirInfo.GetFiles()
            item = New ListViewItem(file.Name, 1)
            subItems = New ListViewItem.ListViewSubItem() {New ListViewItem.ListViewSubItem(item, "File"), New ListViewItem.ListViewSubItem(item, _
                file.LastAccessTime.ToShortDateString())}
            item.SubItems.AddRange(subItems)
            ListView1.Items.Add(file.Name, nIndex)  'Ajouter le nom du fichier et l'icône pour listview.
            'Utilisez ceci pour obtenir la petite icône.
            hImgSmall = SHGetFileInfo(file.FullName, 0, shinfo, _
                        Marshal.SizeOf(shinfo), _
                        SHGFI_ICON Or SHGFI_SMALLICON)
            'Utilisez ceci pour obtenir la large icone.
            ' hImgLarge = SHGetFileInfo(file.FullName, 0, _
            ' shinfo, Marshal.SizeOf(shinfo), _
            'SHGFI_ICON Or SHGFI_LARGEICON)
            'L'icône est retournée dans le membre de la hIcon; 'shinfo struct.
            Dim myIcon As System.Drawing.Icon
            myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon)
            ImageList1.Images.Add(myIcon)      'Icône Ajouter pour imageList.
            nIndex = nIndex + 1
            dossier = file.DirectoryName
        Next file
        ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
        'affiche les icones dossiers ouverts et fermés
        If Not TreeView1.SelectedNode.IsExpanded Then
            e.Node.ImageIndex = 0
        Else
            e.Node.ImageIndex = 1
        End If
    End Sub
    Private Sub TreeView1_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView1.BeforeExpand
        TreeView1.SelectedNode = e.Node
    End Sub
#End Region
End Class


Voilà a toi de jouer, mais il faut savoir que ce ne sera jamais aussi bien que l'Openfiledialog avec l'explorateur de Windows.

@+ Le Pivert
cs_DAN1
Messages postés
78
Date d'inscription
samedi 12 avril 2003
Dernière intervention
19 juillet 2017
> cs_Le Pivert
Messages postés
5606
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
Bonjour Le Pivert.
J'ai récupéré le code que tu m'indiquais et je te remercie il y a tout de même un petit problème sur les lignes:
If Not TreeView1.SelectedNode.IsExpanded Then

pour lequel je récupère une erreur :
«La référence d'objet n'est pas définie à une instance d'un objet. »
Je ne vois pas de solution qu'en penses-tu ?
A+.
Dan
»
cs_Le Pivert
Messages postés
5606
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
> cs_DAN1
Messages postés
78
Date d'inscription
samedi 12 avril 2003
Dernière intervention
19 juillet 2017
-
Supprime le code où tu as l'erreur

 'affiche les icones dossiers ouverts et fermés
        If Not TreeView1.SelectedNode.IsExpanded Then
            e.Node.ImageIndex = 0
        Else
            e.Node.ImageIndex = 1
        End If


et mets cela:

Private Sub TreeView1_AfterExpand(sender As Object, e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterExpand
        'affiche les icones dossiers ouverts et fermés
        If Not TreeView1.SelectedNode.IsExpanded Then
            e.Node.ImageIndex = 0
        Else
            e.Node.ImageIndex = 1
        End If
    End Sub


après ceci:

 Private Sub TreeView1_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView1.BeforeExpand
        TreeView1.SelectedNode = e.Node
    End Sub
Commenter la réponse de cs_Le Pivert
0
Merci
salut juste pour info tu peut aussi récupéré le bitmap de l’icône associer a une extension de fichier comme ceux ci :


Dim icone As Icon = Icon.ExtractAssociatedIcon("Position de ton fichier c:\....")
Dim convert As New Bitmap(32, 32, System.Drawing.Imaging.PixelFormat.Format32bppRgb)
convert = icone.ToBitmap()
PictureBox1.Image = convert
cs_Le Pivert
Messages postés
5606
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
Merci, mais pour le mettre dans une ListView, ce n'est pas aussi simple.
Voir plus haut

@+ Le Pivert
cs_DAN1
Messages postés
78
Date d'inscription
samedi 12 avril 2003
Dernière intervention
19 juillet 2017
> cs_Le Pivert
Messages postés
5606
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
Bonjour Le Pivert
depuis que tu m'as indiqué l'utilisation des treeview j'ai bien progressé mais il me reste une question pour laquelle je n'ai pas encore reçu de réponse, il s'agit de conserver le _surlignement de maligne sélectionnait dans latreewiew .
Peux-tu jeter un coup d'œil sur ma dernière question dans le forum à ce sujet ?
Je suis convaincu que tu vas me trouver la bonne solution comme d'habitude.
Bien à toi.
Dan
Commenter la réponse de Rykudos

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.