我需要做的是阻止用户在我声明要浏览的地方进行浏览。
例如,我点击了按钮ofd.InitialDirectory = Location;
。
Location
例如C:\Users\Chris\Pictures
。
问题是,我知道有些用户会尝试聪明,可能会选择我声明的文件夹之外的东西。有没有办法防止这种情况发生?
可能的解决方法:
只是一个if语句检查所选文件的位置是否以相同的Location
开头,我将其启动。
OpenFileDialog ofd = new OpenFileDialog();
private void button1_Click(object sender, EventArgs e)
{
string newPath = @"C:\Users\Chris\Pictures";
ofd.InitialDirectory = Location;
if (ofd.ShowDialog() == DialogResult.OK)
{
if (ofd.FileName.Contains(Location))
{
textBox1.Text = ofd.FileName;
}
else
{
MessageBox.Show("Please select a file that is located in the specified location (" + Location + ")"
, "Alert", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
答案 0 :(得分:2)
您无法阻止用户导航到其他文件夹,如果您想这样做,则必须构建自己的OpenFileDialog
。您可以阻止该文件被接受。
您必须为此处理FileOk
事件。您可以检查父目录是否是您想要的目录。
这样的事情:
private void openFileDialog1_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
{
string[] files = openFileDialog1.FileNames;
foreach (string file in files )
{
if (Path.GetDirectoryName(file) != yourRequiredPath)
{
e.Cancel = true;
break;
}
}
}
答案 1 :(得分:1)
这是不可能的。
您无法限制用户阻止他们浏览您不希望的其他地方。
解决此问题的一种可能方法是使用自定义验证编写自定义打开对话框。
答案 2 :(得分:1)
如果你真的想在文件对话框中阻止导航,那么唯一的方法就是使用COM 1 提供的Common Item Dialog,并给它一个IFileDialogEvents
并实现OnFolderChanging
事件。要允许导航,请返回S_OK
并拒绝导航返回其他内容。
1 "由COM"提供在组件对象模型中,而不是某些第三方。