visual ruta open obtener net ejemplo configurar con asp archivo c# .net vb.net winforms openfiledialog

ruta - openfiledialog showdialog c#



Seleccione un archivo o carpeta del mismo cuadro de diálogo en.NET (9)

AFAIK, no hay nada en el marco de .NET que lo haga de la caja.

Los diálogos de archivos .NET derivan de CommonDialog :

Se requieren clases heredadas para implementar RunDialog invocando ShowDialog para crear un cuadro de diálogo común específico. Las clases heredadas pueden anular HookProc para implementar la funcionalidad de enlace de cuadro de diálogo específico.

¿Existe una manera "fácil" de seleccionar un archivo O una carpeta del mismo cuadro de diálogo?

En muchas aplicaciones que creo, acepto los archivos o las carpetas como entrada. Hasta ahora, siempre termino creando un interruptor para alternar entre los diálogos de selección de archivos o carpetas, o solo con la funcionalidad de arrastrar y soltar.

Dado que esto parece una cosa tan básica, me imagino que esto se ha creado antes, pero buscar en Google no da como resultado mucha información. Así que parece que tendría que empezar de cero y crear un cuadro de diálogo de selección personalizado, pero prefiero no introducir ningún problema reinventando la rueda para una tarea tan trivial.

¿Alguien algún consejo o soluciones existentes?

Para mantener la UI constante, sería bueno si es posible ampliar el OpenFileDialog (o el FolderBrowserDialog).


De acuerdo con los consejos anteriores, encontré algunos códigos de trabajo que usan el diálogo estándar de Navegador de Carpetas en la siguiente ubicación: http://topic.csdn.net/t/20020703/05/845468.html

La clase para el cuadro de diálogo extendido del navegador de carpetas

Imports System Imports System.Text Imports System.Windows.Forms Imports System.Runtime.InteropServices Public Class DirectoryDialog Public Structure BROWSEINFO Public hWndOwner As IntPtr Public pIDLRoot As Integer Public pszDisplayName As String Public lpszTitle As String Public ulFlags As Integer Public lpfnCallback As Integer Public lParam As Integer Public iImage As Integer End Structure Const MAX_PATH As Integer = 260 Public Enum BrowseForTypes As Integer Computers = 4096 Directories = 1 FilesAndDirectories = 16384 FileSystemAncestors = 8 End Enum Declare Function CoTaskMemFree Lib "ole32" Alias "CoTaskMemFree" (ByVal hMem As IntPtr) As Integer Declare Function lstrcat Lib "kernel32" Alias "lstrcat" (ByVal lpString1 As String, ByVal lpString2 As String) As IntPtr Declare Function SHBrowseForFolder Lib "shell32" Alias "SHBrowseForFolder" (ByRef lpbi As BROWSEINFO) As IntPtr Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDList" (ByVal pidList As IntPtr, ByVal lpBuffer As StringBuilder) As Integer Protected Function RunDialog(ByVal hWndOwner As IntPtr) As Boolean Dim udtBI As BROWSEINFO = New BROWSEINFO() Dim lpIDList As IntPtr Dim hTitle As GCHandle = GCHandle.Alloc(Title, GCHandleType.Pinned) udtBI.hWndOwner = hWndOwner udtBI.lpszTitle = Title udtBI.ulFlags = BrowseFor Dim buffer As StringBuilder = New StringBuilder(MAX_PATH) buffer.Length = MAX_PATH udtBI.pszDisplayName = buffer.ToString() lpIDList = SHBrowseForFolder(udtBI) hTitle.Free() If lpIDList.ToInt64() <> 0 Then If BrowseFor = BrowseForTypes.Computers Then m_Selected = udtBI.pszDisplayName.Trim() Else Dim path As StringBuilder = New StringBuilder(MAX_PATH) SHGetPathFromIDList(lpIDList, path) m_Selected = path.ToString() End If CoTaskMemFree(lpIDList) Else Return False End If Return True End Function Public Function ShowDialog() As DialogResult Return ShowDialog(Nothing) End Function Public Function ShowDialog(ByVal owner As IWin32Window) As DialogResult Dim handle As IntPtr If Not owner Is Nothing Then handle = owner.Handle Else handle = IntPtr.Zero End If If RunDialog(handle) Then Return DialogResult.OK Else Return DialogResult.Cancel End If End Function Public Property Title() As String Get Return m_Title End Get Set(ByVal Value As String) If Value Is DBNull.Value Then Throw New ArgumentNullException() End If m_Title = Value End Set End Property Public ReadOnly Property Selected() As String Get Return m_Selected End Get End Property Public Property BrowseFor() As BrowseForTypes Get Return m_BrowseFor End Get Set(ByVal Value As BrowseForTypes) m_BrowseFor = Value End Set End Property Private m_BrowseFor As BrowseForTypes = BrowseForTypes.Directories Private m_Title As String = "" Private m_Selected As String = "" Public Sub New() End Sub End Class

El código para implementar el diálogo extendido

Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs) Dim frmd As DirectoryDialog = New DirectoryDialog() '' frmd.BrowseFor = DirectoryDialog.BrowseForTypes.Directories '' frmd.BrowseFor = DirectoryDialog.BrowseForTypes.Computers frmd.BrowseFor = DirectoryDialog.BrowseForTypes.FilesAndDirectories frmd.Title = "Select a file or a folder" If frmd.ShowDialog(Me) = DialogResult.OK Then MsgBox(frmd.Selected) End If End Sub



Se ha hecho. Puede usar FolderBrowserDialogEx - una derivada reutilizable del FolderBrowserDialog incorporado. Esta le permite escribir una ruta, incluso una ruta UNC. Puede buscar carpetas o archivos + carpetas. Puede buscar computadoras o impresoras con él. Basado en el FBD incorporado, pero ... mejor. Mas flexible. Si hace clic en una carpeta en la GUI, la ruta aparece en el cuadro de texto. Si ingresa una ruta, la carpeta se activará. Muchas opciones que el diálogo integrado no tiene.

Código fuente completo. Gratis. Licencia MS-Public.

FolderBrowserDialogEx http://www.freeimagehosting.net/uploads/bfbab6cea5.png

Código para usarlo:

var dlg1 = new Ionic.Utils.FolderBrowserDialogEx(); dlg1.Description = "Select a folder to extract to:"; dlg1.ShowNewFolderButton = true; dlg1.ShowEditBox = true; //dlg1.NewStyle = false; dlg1.SelectedPath = txtExtractDirectory.Text; dlg1.ShowFullPathInEditBox = true; dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer; // Show the FolderBrowserDialog. DialogResult result = dlg1.ShowDialog(); if (result == DialogResult.OK) { txtExtractDirectory.Text = dlg1.SelectedPath; }


Si desea mostrar solo tipos de archivos específicos, el siguiente article (con el código fuente en C #) puede ayudarlo a:

article

También explica las otras opciones disponibles para "personalizar" el diálogo FolderBrowser,


Todos los cuadros de diálogo integrados utilizan las API de shell que corresponden a su acción, PrintDialog, OpenFileDialog, SaveFileDialog, etc.

Lo más probable es que tenga que crear manualmente esta funcionalidad.


esto le permitirá seleccionar carpetas usando OpenFileDialog

openFileDialog1.CheckFileExists = false; openFileDialog1.ValidateNames = false;



Técnicamente, es posible. El cuadro de diálogo de shell utilizado por FolderBrowseDialog tiene la capacidad de devolver tanto archivos como carpetas. Desafortunadamente, esa capacidad no está expuesta en .NET. Ni siquiera la reflexión puede marcar el indicador de opción requerido.

Para que funcione, tendría que P / Invocar SHBrowseForFolder () con el indicador BIF_BROWSEINCLUDEFILES activado en BROWSEINFO.ulFlags (value = 0x4000). La P / Invoke es arenosa, lo mejor es copiar y pegar el código de otra fuente o la clase FolderBrowseDialog con la ayuda de Reflector.