禁止在 win API 包中的 CommonOpenFileDialog 上进行输入验证

本文关键字:输入 验证 CommonOpenFileDialog win API 包中 禁止 | 更新日期: 2023-09-27 18:35:42

这是一个WPF应用程序,具有最新版本的.NET Framework和VS2015在 Win 10 盒子上。

我正在尝试使用Windows API代码包1.1中的"CommonOpenFileDialog"允许用户建立一个文件夹,在其中执行某些操作。文件夹可以是现有文件夹,也可以是用户指定的新文件夹。

如果用户想要创建一个新文件夹,那么我希望他们能够指定通过编辑底部"文件夹:"文本框中的文本来编辑文件夹对话。在此上下文中,对话只是一种手段,通过它导航到要在其中创建新文件夹的文件夹。我的计划是验证我的代码中的输入以检查有效(现有)路径,以及如果路径不存在,只需创建路径即可。

这是代码:

   private void test1_folderSelectorDialog ()
   {
       if (CommonFileDialog.IsPlatformSupported)
       {
            var folderSelectorDialog = new CommonOpenFileDialog();
            folderSelectorDialog.EnsureReadOnly = false;
            folderSelectorDialog.IsFolderPicker = true;
            folderSelectorDialog.Multiselect = false;
            folderSelectorDialog.EnsureValidNames = false;
            folderSelectorDialog.EnsurePathExists = false;
            folderSelectorDialog.EnsureFileExists = false;
            folderSelectorDialog.InitialDirectory
                 = "C:''My_Initial_Directory";
            folderSelectorDialog.Title = "test1_folderSelectorDialog";
            if (folderSelectorDialog.ShowDialog() == CommonFileDialogResult.Ok)
                TxBx_folder.Text = folderSelectorDialog.FileName;
            this.Focus();
       }
       else
           MessageBox.Show ("CommonFileDialog is not supported");
   }

当我运行对话框并修改"文件夹:"文本框中的文本时,然后按"选择文件夹",对话框将验证输入并发出弹出对话框,显示以下消息:

"路径不存在。检查路径,然后重试。

请注意,我已经设置了"EnsureValidNames","EnsurePathExists"和"确保文件存在"到"假"。(如果它们不控制对话框验证,那么他们在那里干什么?

我可以右键单击对话框窗口并使用"新建>文件夹"创建一个新文件夹(如果我无法解决此问题,这就是我必须做的),但我宁愿按照我试图的方式去做,因为它看起来很多以这种方式更容易、更直观地做到这一点。

我如何让愚蠢的东西变得 shaddup 并接受输入而无需对它做出判断?

谢谢!

禁止在 win API 包中的 CommonOpenFileDialog 上进行输入验证

如果您希望用户仅选择文件夹,则以下代码就足够了

CommonOpenFileDialog dialog = new CommonOpenFileDialog()
dialog.IsFolderPicker = true
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
    filesPath = dialog.FileName
}

我相信下面的东西不是必需的

folderSelectorDialog.Multiselect = false
folderSelectorDialog.EnsureValidNames = false
folderSelectorDialog.EnsurePathExists = false
folderSelectorDialog.EnsureFileExists = false