自定义OpenFileDialog

我正在使用C#中的winforms应用程序。 我想要实现的是从用户获取我正在使用以下代码的文件:

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 

我该如何实现这一目标?

是的,这是可能的,我成功地使用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中保存和取消按钮的默认排列

使用GetSaveFileName创建SaveFileDialog时如何停止覆盖提示

你必须使用WinAPI ,你需要自己编写ShowDialog方法,调用其中的GetOpenFileName窗口函数,而不是调用.net的OpenFileDialogGetOpenFileName将创建Windows OpenFileDialog 。 (请参阅http://msdn.microsoft.com/en-us/library/ms646927%28v=vs.85%29.aspx )。 这与编写HookProc过程以及在其中捕获WM_INITDIALOG, CDN_INITDONE等事件一起将帮助您按照自己的意愿WM_INITDIALOG, CDN_INITDONE

要添加单选按钮等,您必须调用Windows函数,如CreateWindowExSendMessage ….

第二个链接具有定制的确切方向……

要求任何澄清……

在XP上,您需要使用钩子过程方法和GetOpenFileName API。 在Vista及更高版本中,这将导致具有有限效用的可怕外观文件对话框,例如无搜索。 在Vista上,你应该使用IFileDialog并自定义你需要IFileDialogCustomize接口的对话框。 因为新的Vista对话框是作为COM接口公开的,所以它们很容易在.net中使用。

试试这段代码:

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