在WPF中如何禁用FolderBrowserDialog对话框中的右键单击?

4
 System.Windows.Forms.FolderBrowserDialog dlg = new FolderBrowserDialog();
 HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
 System.Windows.Forms.IWin32Window win = new OldWindow(source.Handle);
 System.Windows.Forms.DialogResult result = dlg.ShowDialog(win);

我使用这个功能来获取文件夹对话框,但现在我需要禁用该文件夹对话框中的右键单击,以防止从那里删除文件夹。创建自定义文件夹对话框是我不想采取的最后一种选择。
因此,有人能否建议任何可能的解决方案,而不需要自定义文件夹对话框。
2个回答

2
你无法实现。该类不能被继承,因此你无法覆盖任何设置。也没有事件可供挂钩。
所以你有几个选择:
1. 自行编写 2. 使用文件系统锁定用户环境。 3. 购买具有此功能的第三方控件。
我们选择了选项2,因为最终用户不需要在我们的RDP服务器上使用“普通”Windows应用程序/文件位置,他们只需要运行我们的应用程序。他们添加到的组织单位(OU)应用权限,使他们只能访问我们想要他们访问的文件夹。当显示对话框时,他们看不到任何正常项目,但可以创建文件夹,保存项目,从我们给予他们使用权限的文件夹中加载项目。

你知道有没有其他的第三个选项吗? - Doug

0

Ravindra,

由于上下文菜单中的删除是Windows功能,因此您需要修改注册表设置。

本质上,您需要修改/删除删除注册表项,并在代码执行后恢复它。

您可以在HKEY_CLASSES_ROOT下找到注册表项。(您确实需要一些时间来找出这个条目)。

例如:

  System.Windows.Forms.FolderBrowserDialog fd = new System.Windows.Forms.FolderBrowserDialog();

  //Get key for New menu option in Context menu.
  RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"Directory\Background\shellex\ContextMenuHandlers\New",true);

  //Set it to blank.
  key.SetValue("", "");
  fd.ShowDialog();

  //Restore the value.
  key.SetValue("", "{D969A300-E7FF-11d0-A93B-00A0C90F2719}");`

谢谢回复。我会查看如何修改HKEY_CLASSES_ROOT下的注册表项。如果您找到任何有用的链接,请分享给我。 - Ravindra Nadh
1
如果在恢复原始注册表条目之前计算机崩溃会发生什么? - Calcolat
@Calcolat:一个简单的try-catch块就可以解决问题。在catch块中可以进行密钥的恢复。 - Ankit
@RavindraNadh:这个有什么进展吗? - Ankit
@RavindraNadh: 我会检查一下看能否找到任何信息并回复。 - Ankit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接