2015-07-29 3 views
3
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Отключить Щелкните правой кнопкой мыши в диалоговом окне FolderBrowserDialog - wpf?

Создание пользовательского folderDialog box - последний вариант, который я хочу взять.

Итак, может ли кто-нибудь предложить любое возможное решение для этого без специальной папкиDialog.

ответ

1

Вы не можете. Класс не может быть унаследован, поэтому вы не можете переопределить какие-либо настройки. Нет никаких событий.

Так у вас есть пара вариантов:

  1. ролл свой собственный
  2. Используйте файловую систему, чтобы заблокировать вашу пользовательскую среду.
  3. Купите сторонний элемент управления, у которого есть эта функция.

Мы выбрали вариант 2, поскольку конечным пользователям не нужно было использовать «обычные» приложения/места для Windows на нашем RDP-сервере, они просто необходимы для запуска нашего приложения. Организационная единица (OU) добавляется к применяемым разрешениям, что они имеют доступ только к папкам, к которым они хотели иметь доступ. Они не могут видеть какие-либо из обычных элементов, которые вы увидите при отображении диалога, но можете создавать папки, сохранять элементы, загружать элементы из папок, которые мы им разрешаем использовать.

0

Ravindra,

С Delete в ContextMenu это функция окна, вы должны изменить параметры реестра.

По сути, вы должны изменить/удалить запись реестра & после выполнения кода, вы должны восстановить его.

Вы можете найти запись в реестре по адресу: HKEY_CLASSES_ROOT. (Вы действительно потратите некоторое время, чтобы понять эту запись).

Ex:

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}");` 
+0

Благодарность за reply..I будет проверять, как изменить запись реестра в: HKEY_CLASSES_ROOT..If вы найдете любую полезную ссылку, пожалуйста, поделитесь им .. –

+1

Что произойдет, если сбой компьютера, прежде чем восстановлена ​​первоначальная запись в реестре? – Calcolat

+0

@Calcolat: Простая попытка, блок catch может сделать трюк. Внутри блока catch можно выполнить восстановление ключа. – Ankit

Смежные вопросы