0

I'm on Vista and I'm using Microsoft.Win32.OpenFileDialog class.

When I call ShowDialog() I get the old XP-style dialog: alt text

How do I get the new Vista-style dialog with fallback to the old one on WindowsXP? alt text

A bit of rumble:

I don't really understand why they didn't replace the dialog in vista, but kept both of them. Now legacy apps will never open new dialog, unless updated.

Kugel
  • 19,354
  • 16
  • 71
  • 103

3 Answers3

2

Yes, you'd have to upgrade to .NET 4.0 to get the new dialog. If you're stuck on 3.5 then you can use System.Windows.Forms.OpenFileDialog, it did get the update to use the new IFileDialog COM interface.

The fallback is automatic but you can use its AutoUpgradeEnabled property to force legacy, if necessary. Which it is not, unlikely that a .NET program would modify the dialog.

Hans Passant
  • 922,412
  • 146
  • 1,693
  • 2,536
  • The code I put above works for me even compiled as 2.0 and compiled from VS2008. Are you sure it's the .NET framework version @Kugel? Can you try on your new project setting the .NET framework version down? – Brian R. Bondy Oct 07 '10 at 19:56
  • @Brian - that would be a miracle. Be sure to use the Microsoft.Win32 namespace, as used in a WPF program. – Hans Passant Oct 07 '10 at 19:59
  • It works, but I'm reluctant to include Windows.Forms into WPF application. – Kugel Oct 07 '10 at 20:00
  • @Hans: Not sure if it makes a diff but ya I was referencing a Winforms program. – Brian R. Bondy Oct 07 '10 at 20:02
  • @Kugel - it is not going to infect your WPF app with winforms manners. The class is a very thin wrapper around the native Windows interface, just a bunch of pinvoke you wouldn't want to maintain yourself. It is up to you. – Hans Passant Oct 07 '10 at 20:31
1

The first dialog you showed is a save dialog not an open dialog.

You should only have to do this:

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
}
Brian R. Bondy
  • 339,232
  • 124
  • 596
  • 636
1

Reference 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
}
Sorax
  • 2,205
  • 13
  • 14
  • It appears I'm late to the party :( ... again. – Sorax Oct 07 '10 at 19:47
  • "How do I get the new Vista-style dialog with fallback to the old one on WindowsXP?" It appears that is what's being asked. Not sure about the "fallback" but either way my answer works. – Sorax Oct 07 '10 at 19:51
  • 1
    Your code is correct, I know. It opens new openfiledalog like @Brian R. Bondy's code. But, Kugel's question is about the appearance of openfiledialog. – Serkan Hekimoglu Oct 07 '10 at 19:56
  • 1
    actually this answer seems correct for my situation in .NET 3.5 I can get new-style by referencing windows.forms. But I don't think Sorax meant it this way. – Kugel Oct 07 '10 at 19:58
  • 1
    That's why I was sure to include the reference to System.Windows.Forms. Win32 is the old version. I'm glad I could help. @Serkan, perhaps remove your downvote? – Sorax Oct 07 '10 at 20:03