简体   繁体   中英

When does Microsoft.Win32.OpenFileDialog.ShowDialog() return null?

OpenFileDialog 's ShowDialog method returns a nullable boolean, set to true if the user clicked OK or false if he clicked Cancel. When does it return null ? The documentation does not say.

This is stated in the questions linked below, but I'll mention here that Programming WPF (Chris Sells, Ian Griffiths) says:

ShowDialog will always return true or false. ... Only after a dialog has been shown but before it's been closed is DialogResult null.

Similar question: When would ShowDialog() return null?

And: Why is DialogResult a nullable bool in WPF?

According to the .NET reflector , Microsoft.Win32.OpenFileDialog.ShowDialog is implemented by a base class, Microsoft.Win32.CommonDialog . That implementation has only one return clause:

return new bool?(this.RunDialog(activeWindow));

RunDialog returns a bool , not a bool? .

bool? is just a C# shorthand for System.Nullable<bool> . The constructor of System.Nullable<bool> , according to reflector again, sets the value of the nullable to its parameter, and marks its hasValue property as true.

So... you shouldn't ever get a null result. A quick test confirms that closing the dialog without canceling (red x button) indeed returns a false value, not a null .

The Windows Forms version of OpenFileDialog returns a DialogResult, which has a wider range of values .

My guess is that OpenFileDialog returns bool? to be consistent with other WPF dialogs that actually can return a null result.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM