Настройка Диалогового Окна Openfiledialog

Я работаю над приложением winforms в C#. Я хочу получить файл от пользователя, для которого я использую следующий код:

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

теперь все работает нормально, но я хочу поместить 3 переключателя в одно и то же диалоговое окно, то есть теперь я получу две вещи из этого диалогового окна

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

как этого достичь?

3 ответов


Да, это возможно, я сделал такую же настройку с SaveFileDialog успешно и это довольно интересно.

перейдите по следующим ссылкам:

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

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

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

также мои собственные вопросы тоже поможет вам:

изменить расположение кнопок сохранения и отмены по умолчанию в SaveFileDialog

как остановить overwriteprompt при создании SaveFileDialog с помощью GetSaveFileName

вы должны использовать WinAPI для этого и нужно написать ShowDialog метод в вашем собственном вызове GetOpenFileName функция windows внутри него, вместо вызова .net OpenFileDialog. The GetOpenFileName создаст windows OpenFileDialog. (См.http://msdn.microsoft.com/en-us/library/ms646927%28v=vs.85%29.aspx). Это вместе с написанием процедуры HookProc и улавливанием таких событий, как WM_INITDIALOG, CDN_INITDONE внутри он поможет вам сделать то, что вы хотите.

для добавления переключателей и т. д., вы должны вызвать функции windows, такие как CreateWindowEx и SendMessage....

2-я ссылка имеет точное направление к настройке...

попросите любые разъяснения...


в XP вам нужно использовать метод процедуры hook и API GetOpenFileName. В Vista и более поздних версиях это приведет к ужасному файловому диалогу с ограниченной утилитой, например, без поиска. В Vista вы должны использовать IFileDialog и настроить диалоговое окно, вам нужен интерфейс IFileDialogCustomize. Поскольку новые диалоговые окна Vista представлены как COM-интерфейсы, их довольно легко использовать .сеть.


попробуйте этот код:

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;
    }
}