【问题标题】:Disable Right click in FolderBrowserDialog dialog box - wpf?在 FolderBrowserDialog 对话框中禁用右键单击 - wpf?
【发布时间】:2015-10-19 19:57:27
【问题描述】:
 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);

我已经使用它来获取文件夹对话框,但现在我需要禁用该文件夹对话框中的右键单击,以便我可以防止从那里删除文件夹..enter code here

创建一个自定义文件夹对话框是我想要采取的最后一个选项..

那么,如果没有自定义文件夹对话框,有人可以提出任何可能的解决方案吗?

【问题讨论】:

    标签: c# wpf wpf-controls folderbrowserdialog


    【解决方案1】:

    你不能。该类不能被继承,因此您不能覆盖任何设置。没有可挂钩的事件。

    所以你有几个选择:

    1. 自己动手
    2. 使用文件系统锁定您的用户环境。
    3. 购买具有此功能的第三方控件。

    我们选择了选项 2,因为最终用户不需要在我们的 RDP 服务器上使用“正常”的 Windows 应用程序/文件位置,他们只需要运行我们的应用程序。他们添加到的组织单位 (OU) 应用他们只能访问我们希望他们有权访问的文件夹的权限。他们看不到您在显示对话框时会看到的任何正常项目,但可以创建文件夹、保存项目、从我们授予他们使用权限的文件夹中加载项目。

    【讨论】:

    • 你知道有任何选项#3吗?
    【解决方案2】:

    拉文德拉,

    由于 ContextMenu 中的删除是 Windows 功能,因此您必须修改注册表设置。

    本质上,您必须修改/删除 Delete 注册表项,并且在您的代码执行后您必须恢复它。

    您可以在以下位置找到注册表项: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..如果您发现任何有用的链接,请分享..
    • 如果计算机在原始注册表项恢复之前崩溃会怎样?
    • @Calcolat:一个简单的 try, catch 块就可以解决问题。在 catch 块中可以完成密钥的恢复。
    • @RavindraNadh:运气好吗?
    • @RavindraNadh:我会检查是否能找到任何东西并恢复。
    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    相关资源
    最近更新 更多