2011-05-23 40 views
8

我正在C#中使用winforms應用程序。我想實現的是得到用戶的一個文件,我現在用的是下面的代碼:定製OpenFileDialog

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

現在,一切工作正常,但我想提出三個單選按鈕,在同一個對話框,這意味着我現在可以從此對話框中獲得兩件東西:

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 

我該如何做到這一點?

+0

+1的問題和答案(S)。至少現在我意識到我不想移動那麼多的奶酪。我會找到另一種方式,不會破壞用戶對Windows中正常內容的期望。 – 2013-05-04 10:42:12

回答

8

是的,這是可能的,我成功地做了與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

也是我自己的問題,也將幫助您:

Change default arrangement of Save and Cancel buttons in SaveFileDialog

How to stop overwriteprompt when creating SaveFileDialog using GetSaveFileName

您必須使用WinAPI爲此,你需要寫在自己的ShowDialog方法調用它裏面的窗戶GetOpenFileName功能,而不是調用.NET的OpenFileDialogGetOpenFileName將創建窗口OpenFileDialog。 (請參閱http://msdn.microsoft.com/en-us/library/ms646927%28v=vs.85%29.aspx)。這一起寫HookProc程序並在其中捕捉諸如WM_INITDIALOG, CDN_INITDONE等事件將幫助你做你想做的事。

要添加單選按鈕等,你必須調用Windows功能,如CreateWindowExSendMessage ....

第二連桿具有定製的確切方向......

詢問任何澄清...

3

在XP上,您需要使用掛鉤過程方法和GetOpenFileName API。在Vista和之後的版本中,這會導致一個可怕的文件對話框,其功能有限,例如沒有搜索。在Vista上,您應該使用IFileDialog並自定義您需要IFileDialogCustomize接口的對話框。由於新的Vista對話框以COM接口的形式公開,因此它們很容易在.net中使用。

-4

試試這個代碼:

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

-1這沒有幫助解決原始問題。 – Jesse 2013-03-29 07:17:06