2013-02-28 2 views
1

У меня есть приложение Windows Form, и я использую настраиваемый элемент управления, который позволяет пользователям выбирать и сохранять изображение. Однако мне нужно вставить некоторые ограничения. Легко было выбрать только файлы jpg, но теперь мне нужно ограничить пользователей, чтобы они могли видеть и выбирать только jpg изображений с определенным рисунком в имени и, если возможно (я думаю, что видел это в других приложениях Windows) Я хочу, чтобы этот шаблон оставался в поле File Name, и пользователь не смог его удалить.Настройка OpenFileDialog Ограничения

, что я сделал до сих пор:

Я ограничение установлено:

fileNameFilter = "All files (*.jpg)|" + ImageNameFilter + "*.jpg"; 
    openFileDialog1.Filter = fileNameFilter; 

Я могу показать пользователю, что картина ему нужно искать:

openFileDialog1.FileName = fileNameFilter; 

Однако есть две вещи, которые я до сих пор не могу выполнить. Вот экран печати, чтобы понять:

enter image description here

Первый - шаблон отображается, но я могу удалить его, когда это сделано, как это, и я хочу, если это возможно File name поле быть Read only или в других слова, пользователь не должен удалять то, что я там положил.

Второй - это список с ранее открытыми файлами, даже если файл не соответствует ограничениям/фильтрам имен, которые пользователь все еще может выбрать в списке и сохранить этот файл. Мне нужно, если возможно, либо очистить этот список, когда открывается File Dialog, либо каким-то образом остановить пользователя от возможности сохранить этот файл, но я думаю, что для второго потребуется слишком много дополнительной бизнес-логики, поэтому я предпочитаю просто очищать список.

ответ

2

Пытается точно контролировать то, что показано в диалоговом окне файла через фильтр или шаблон имени файла, не будет работать. Пользователь всегда может ввести свой собственный шаблон в поле редактирования имени файла.

Что вам нужно сделать, это использовать возможности диалогового окна файла для контроля того, какие объекты отображаются. К сожалению, оболочка C# не раскрывает эту функциональность, предлагаемую базовыми элементами управления Win32.

Если вам необходимо поддерживать XP, вам необходимо прослушать уведомление CDN_INCLUDEITEM. Это отправляется для каждого элемента в папке. Таким образом, вы получаете возможность разрешить или запретить включение каждого элемента.

Для диалогов, используемых в Vista, и позже это другое. В этих диалогах используется IFileDialog. Чтобы добавить фильтр, вам необходимо вызвать метод SetFilter. Этот фильтр является вашей реализацией IShellItemFilter, которая снова контролирует включение с использованием метода IncludeItem.

Это будет немного грязно, чтобы все это произошло от C#, но это правильный способ сделать то, что вы просите. Как только вы это сделаете, нет необходимости даже думать о попытке сделать окно редактирования имени файла доступным только для чтения. Потому что в диалоговом окне будут предлагаться только те элементы, которые вы позволили включить.

+0

Если честно, то, что вы написали, выше моего текущего уровня. Я могу попробовать что-то, но есть большой шанс потерпеть неудачу. Вы упомянули, что если, однако, если мне удастся сделать то, что вы предлагаете, нет необходимости пытаться сделать «поле редактирования имени файла» только для чтения. Но есть ли способ сделать это, потому что мне кажется, что это простое решение? – Leron

+0

На самом деле это довольно легко использовать IFileDialog –

1

No.

Два решения: проверьте имя файла после Open-click (что вы должны сделать в любом случае) или создайте свой собственный элемент управления, который отобразит файлы, соответствующие вашему шаблону имени файла.

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