Как я могу получить PropertyGrid для отображения SaveFileDialog? - PullRequest
2 голосов
/ 07 декабря 2009

У меня есть элемент управления сеткой свойств, где я хочу иметь возможность отображать SaveFileDialog, когда пользователь находится в процессе экспорта данных в новый файл. Я легко могу подключить OpenFileDialog к FileNameEditor, но, похоже, не существует эквивалентного класса для сохранения файлов.

Существует ли существующий класс, который можно указать в атрибуте System.ComponentModel.Editor, чтобы отображался SaveFileDialog?

Ответы [ 3 ]

7 голосов
/ 07 декабря 2009

Это прекрасно работает:

public class SaveFileNameEditor: UITypeEditor
{
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        if (context == null || context.Instance == null || provider == null)
        {
            return base.EditValue(context, provider, value);
        }

        using (SaveFileDialog saveFileDialog = new SaveFileDialog())
        {
            if (value != null)
            {
                saveFileDialog.FileName = value.ToString();
            }

            saveFileDialog.Title = context.PropertyDescriptor.DisplayName;
            saveFileDialog.Filter = "All files (*.*)|*.*";
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                value = saveFileDialog.FileName;
            }
        }

        return value;
    }
}
4 голосов
/ 07 декабря 2009

Таким образом, объект, который вы устанавливаете в propertyGrid1.SelectedObject, нуждается в открытом свойстве, подобном следующему:

            private string _saveFile;
    [BrowsableAttribute(true)]
    [EditorAttribute(typeof(SaveFileNameEditor), typeof(System.Drawing.Design.UITypeEditor))]
    public string SaveFileEditorVlad
    {
        get { return _saveFile; }
        set { _saveFile = value; }
    }

для того, чтобы заставить Stewy ответить работать :) Затем во время выполнения, когда вы отредактируете это свойство, появится многоточие, и вы сможете выбрать файл для сохранения как.

0 голосов
/ 07 декабря 2009

Я не думаю, что есть. Вам придется написать свой собственный редактор, производный от UITypeEditor. Это не должно быть так сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...