private static String ShowDialogInner(IFileSaveDialog dialog, IntPtr parentWindowHandle, String title, String initialDirectory, String defaultFileName, IReadOnlyCollection <Filter> filters, Int32 selectedFilterZeroBasedIndex = -1) { FileOpenOptions flags = FileOpenOptions.NoTestFileCreate | FileOpenOptions.PathMustExist | FileOpenOptions.ForceFilesystem | FileOpenOptions.OverwritePrompt; dialog.SetOptions(flags); if (title != null) { dialog.SetTitle(title); } if (initialDirectory != null) { IShellItem2 initialDirectoryShellItem = Utility.ParseShellItem2Name(initialDirectory); if (initialDirectoryShellItem != null) { dialog.SetFolder(initialDirectoryShellItem); } } // if( initialSaveAsItem != null ) // { // IShellItem2 initialSaveAsItemShellItem = Utility.ParseShellItem2Name( initialDirectory ); // if( initialSaveAsItemShellItem != null ) // { // dialog.SetSaveAsItem( initialSaveAsItemShellItem ); // } // } if (defaultFileName != null) { dialog.SetFileName(defaultFileName); } Utility.SetFilters(dialog, filters, selectedFilterZeroBasedIndex); HResult result = dialog.Show(parentWindowHandle); if (result == HResult.Ok) { IShellItem selectedItem; dialog.GetResult(out selectedItem); if (selectedItem != null) { return(Utility.GetFileNameFromShellItem(selectedItem)); } else { return(null); } } else if (result == HResult_Win32_Canceled) { // Cancelled by user. return(null); } else { UInt32 win32ErrorCode = Utility.Win32ErrorFromHResult((UInt32)result); throw new Win32Exception(error: (Int32)win32ErrorCode); } }
private static String ShowDialogInner(IFileSaveDialog dialog, IntPtr parentHWnd, String title, String initialDirectory, String defaultFileName, IReadOnlyCollection <Filter> filters, Int32 selectedFilterZeroBasedIndex = -1) { FileOpenOptions flags = FileOpenOptions.NoTestFileCreate | FileOpenOptions.PathMustExist | FileOpenOptions.ForceFilesystem | FileOpenOptions.OverwritePrompt; dialog.SetOptions(flags); if (title != null) { dialog.SetTitle(title); } if (initialDirectory != null) { IShellItem2 initialDirectoryShellItem = Utility.ParseShellItem2Name(initialDirectory); if (initialDirectoryShellItem != null) { dialog.SetFolder(initialDirectoryShellItem); } } // if( initialSaveAsItem != null ) // { // IShellItem2 initialSaveAsItemShellItem = Utility.ParseShellItem2Name( initialDirectory ); // if( initialSaveAsItemShellItem != null ) // { // dialog.SetSaveAsItem( initialSaveAsItemShellItem ); // } // } if (defaultFileName != null) { dialog.SetFileName(defaultFileName); } Utility.SetFilters(dialog, filters, selectedFilterZeroBasedIndex); HResult result = dialog.Show(parentHWnd); HResult cancelledAsHResult = Utility.HResultFromWin32((int)HResult.Win32ErrorCanceled); if (result == cancelledAsHResult) { // Cancelled return(null); } else { // OK IShellItem selectedItem; dialog.GetResult(out selectedItem); if (selectedItem != null) { return(Utility.GetFileNameFromShellItem(selectedItem)); } else { return(null); } } }
private static String ShowDialogInner(IFileSaveDialog dialog, IntPtr parentHWnd, String title, String initialDirectory, String defaultFileName, IReadOnlyCollection <Filter> filters, Int32 selectedFilterZeroBasedIndex = -1) #endif { FileOpenOptions flags = FileOpenOptions.NoTestFileCreate | FileOpenOptions.PathMustExist | FileOpenOptions.ForceFilesystem | FileOpenOptions.OverwritePrompt; dialog.SetOptions(flags); if (title != null) { dialog.SetTitle(title); } if (initialDirectory != null) { #if NETCOREAPP3_1_OR_GREATER IShellItem2?initialDirectoryShellItem = Utility.ParseShellItem2Name(initialDirectory); #else IShellItem2 initialDirectoryShellItem = Utility.ParseShellItem2Name(initialDirectory); #endif if (initialDirectoryShellItem != null) { dialog.SetFolder(initialDirectoryShellItem); } } // if( initialSaveAsItem != null ) // { // IShellItem2 initialSaveAsItemShellItem = Utility.ParseShellItem2Name( initialDirectory ); // if( initialSaveAsItemShellItem != null ) // { // dialog.SetSaveAsItem( initialSaveAsItemShellItem ); // } // } if (defaultFileName != null) { dialog.SetFileName(defaultFileName); } Utility.SetFilters(dialog, filters, selectedFilterZeroBasedIndex); // HResult hr = dialog.Show(parentHWnd); if (hr.ValidateDialogShowHResult()) { dialog.GetResult(out IShellItem selectedItem); if (selectedItem != null) { return(Utility.GetFileNameFromShellItem(selectedItem)); } else { return(null); } } else { // User cancelled. return(null); } }