2011-05-23 15 views
8

Estoy trabajando en la aplicación winforms en C#. Lo que quiero lograr es conseguir un archivo de usuario para el que estoy usando el siguiente código:Personalización de OpenFileDialog

OpenFileDialog dlg = new OpenFileDialog(); 
if (dlg.ShowDialog() == DialogResult.OK) 
{ 
    string sFileName = dlg.FileName; 
    //my code goes here 
} 

Ahora, todo está funcionando bien pero quiero poner 3 botones de radio en el mismo cuadro de diálogo, lo que significa que ahora obtendría dos cosas de este cuadro de diálogo

string sFileName = dlg.FileName; //same as in case of traditional dialog box 
//some thing like this which tells which radio button is selected: 
dlg.rbTypes.Selected 

¿Cómo logro esto?

+0

+1 para la pregunta y respuesta (s). Al menos ahora me doy cuenta de que no quiero mover tanto queso. Encontraré otra forma que no rompa las expectativas de los usuarios sobre lo que es normal en Windows. –

Respuesta

8

Sí, es posible, hice el mismo tipo de personalización con SaveFileDialog con éxito y es bastante interesante.

Siga los siguientes enlaces:

http://www.codeproject.com/KB/dialog/OpenFileDialogEx.aspx

http://www.codeproject.com/KB/cs/getsavefilename.aspx

http://www.codeproject.com/KB/dialog/CustomizeFileDialog.aspx

también mis propias preguntas también le ayudará a:

Change default arrangement of Save and Cancel buttons in SaveFileDialog

How to stop overwriteprompt when creating SaveFileDialog using GetSaveFileName

usted tiene que utilizar el WinAPI para esto y tiene que escribir el método ShowDialog en su propia llamada a la función GetOpenFileName ventanas en su interior, en lugar de llamar .NET de OpenFileDialog. El GetOpenFileName creará las ventanas OpenFileDialog. (Consulte el http://msdn.microsoft.com/en-us/library/ms646927%28v=vs.85%29.aspx). Esto junto con escribir el procedimiento HookProc y capturar eventos como WM_INITDIALOG, CDN_INITDONE dentro de él lo ayudará a hacer lo que quiera.

Para añadir botones de radio, etc., hay que llamar a las funciones de Windows como CreateWindowEx y SendMessage ....

El segundo enlace tiene la dirección exacta para la personalización ...

Pedir cualquier aclaración ...

3

En XP, debe utilizar el método de procedimiento hook y la API GetOpenFileName. En Vista y más tarde, esto dará como resultado un cuadro de diálogo de aspecto horrible con una utilidad limitada, p. sin búsqueda En Vista debe usar IFileDialog y para personalizar el cuadro de diálogo necesita la interfaz IFileDialogCustomize. Debido a que los nuevos diálogos Vista están expuestos como interfaces COM, son bastante fáciles de consumir en .net.

-4

probar este código:

private void Browse_Click(object sender, EventArgs e) 
{ 
    var fdlg = new OpenFileDialog(); 
    fdlg.Title = "Open a file"; 
    fdlg.InitialDirectory = "c:/"; 
    fdlg.Filter = "all files(*.*)|*.*|all files(*.)|*.*"; 
    fdlg.FilterIndex = 2; 
    fdlg.RestoreDirectory = true; 
    if (fdlg.ShowDialog() == DialogResult.OK) 
    { 
     filetxt.Text = fdlg.FileName; 
    } 
} 
+3

-1 Esto no ayuda a resolver la pregunta original. – Jesse