Как я могу получить PropertyGrid для отображения SaveFileDialog?
У меня есть элемент управления сеткой свойств, где я хочу показать SaveFileDialog, когда пользователь находится в процессе экспорта данных в новый файл. Я могу легко подключить OpenFileDialog с помощью FileNameEditor, но, похоже, не существует эквивалентного класса для сохранения файлов.
Существует ли существующий класс, который я могу указать в атрибуте System.ComponentModel.Editor, чтобы отобразить SaveFileDialog?
Ответы
Ответ 1
Поэтому для объекта, установленного в 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 ответную работу:) Затем во время выполнения, когда вы редактируете это свойство, будет отображаться многоточие, и вы сможете выберите файл для сохранения как.
Ответ 2
Это отлично работает:
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;
}
}
Ответ 3
Я не думаю, что есть. Вам придется написать собственный редактор, полученный из UITypeEditor. Это не должно быть так сложно.