Настройка Диалогового Окна 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;
}
}