Customizing OpenFileDialog

Jame picture Jame · May 23, 2011 · Viewed 20.9k times · Source

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 = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
    string sFileName = dlg.FileName;
    //my code goes here
}

Now, everything is working fine but I want to put 3 radio buttons in the same dialog box, meaning I would now get two things from this dialog box

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

How do I achieve this?

Answer

Dulini Atapattu picture Dulini Atapattu · May 23, 2011

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...