2010-10-07 50 views
0

我在Vista上,我正在使用Microsoft.Win32.OpenFileDialog類。如何在Vista/Win7中自動打開新的OpenFileDialog?

當我打電話ShowDialog()我得到 XP風格的對話框: alt text

如何獲得回退到新 Vista風格對話框對WindowsXP的舊alt text

的隆隆聲了一下:

我真的不明白爲什麼他們不更換Vista中的對話框,但保留他們兩個。現在,除非更新,否則傳統應用程序將永遠不會打開新對話框

+0

這是否取決於您當前的系統主題? – 2010-10-07 19:41:26

+0

哪個版本的.Net框架執行項目目標? – Goblin 2010-10-07 19:44:09

+0

不,它不會,你得到兩個 – Kugel 2010-10-07 19:45:29

回答

2

是的,你必須升級到.NET 4.0,以獲得新的對話框。如果你被困在3.5然後你可以使用System.Windows.Forms.OpenFileDialog,它確實得到更新使用新的IFileDialog COM接口。

回退是自動的,但如果需要,您可以使用其AutoUpgradeEnabled屬性強制遺留。它不是,.NET程序不太可能修改對話框。

+0

是的,你是對的,我剛剛發現了s前一秒。 – Kugel 2010-10-07 19:56:03

+0

我上面的代碼對我來說甚至編譯爲2.0,並從VS2008編譯。你確定它是@Kugel的.NET框架版本嗎?你可以試試你的新項目設置.NET框架版本嗎? – 2010-10-07 19:56:17

+0

@布萊恩 - 那將是一個奇蹟。確保使用WPF程序中使用的Microsoft.Win32命名空間。 – 2010-10-07 19:59:22

1

您顯示的第一個對話框是保存對話框而不是打開的對話框。

您應該只有做到這一點:

OpenFileDialog OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
openFileDialog1.InitialDirectory = "c:\\"; 
openFileDialog1.Filter = "My files (*.myfile)|*.myfile|All files (*.*)|*.*"; 
openFileDialog1.FilterIndex = 1; 
openFileDialog1.RestoreDirectory = true; 

if (openFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    //openFileDialog1.FileName 
} 
+0

抱歉,沒錯,但是這個問題對於打開和保存對話框都是有效的。 – Kugel 2010-10-07 19:42:48

+0

通過上面的代碼在VS2008的win7機器上,我得到了win7對話框。你能確認它不適合你嗎? – 2010-10-07 19:44:39

+0

我更正了圖片 – Kugel 2010-10-07 19:49:28

0

參考System.Windows.Forms

using System.Windows.Forms 

OpenFileDialog openFileDialog1 = new OpenFileDialog(); 

openFileDialog1.InitialDirectory = "c:\\" ; 
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ; 
openFileDialog1.FilterIndex = 2 ; 
openFileDialog1.RestoreDirectory = true ; 

if(openFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    //Do Stuff 
} 
+0

看來我遲到了:(...再次。 – Sorax 2010-10-07 19:47:36

+0

他不問如何爲openfiledialog編寫代碼。 – 2010-10-07 19:48:50

+0

「我如何獲得新的Vista風格的對話框,並回退到WindowsXP上的舊對話框? 「看起來這是被問到的問題,不知道」回退「,但是我的答案能奏效。 – Sorax 2010-10-07 19:51:43

相關問題