Customizing OpenFileDialog

前端 未结 3 694
长发绾君心
长发绾君心 2020-11-30 09:34

I am working on winforms application in C#. What I want to achieve is to get a file from user for which I am using the following code:

OpenFileDialog dlg =          


        
相关标签:
3条回答
  • 2020-11-30 09:39

    Try this code:

    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;
        }
    }
    
    0 讨论(0)
  • 2020-11-30 09:48

    Yes, that's possible, I did the same kind of customization with SaveFileDialog successfully and it's pretty interesting.

    Follow the following links:

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

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

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

    Also my own questions too will help you:

    Change default arrangement of Save and Cancel buttons in SaveFileDialog

    How to stop overwriteprompt when creating SaveFileDialog using GetSaveFileName

    You have to use the WinAPI for this and you need to write the ShowDialog method in your own calling the GetOpenFileName windows function inside it, instead of calling .net's OpenFileDialog. The GetOpenFileName will create the windows OpenFileDialog. (Refer to http://msdn.microsoft.com/en-us/library/ms646927%28v=vs.85%29.aspx). This together with writing the HookProc procedure and catching events such as WM_INITDIALOG, CDN_INITDONE inside it will help you do what you want.

    To add radio buttons etc., you have to call the windows functions such as CreateWindowEx and SendMessage....

    The 2nd link has the exact direction to the customization...

    Ask for any clarifications...

    0 讨论(0)
  • 2020-11-30 09:51

    On XP you need to use the hook procedure method and the GetOpenFileName API. On Vista and later this will result in a horrid looking file dialog with limited utility, e.g. no search. On Vista you should use IFileDialog and to customise the dialog you need the IFileDialogCustomize interface. Because the new Vista dialogs are exposed as COM interfaces they are quite easy to consume in .net.

    0 讨论(0)
提交回复
热议问题