Я перепродаю продукт, который использует VBS для улучшения своих форм. Показ OpenFileDialog от VBS больше не является тривиальным с Vista (я не могу вспомнить). Тем не менее, с ним я также опционально поставляю .Net dll, которая использует COM Interop. Поэтому я подумал, что было бы неплохо включить в него FilePicker
.
В этой сборке у меня в настоящее время есть следующий (пример) код, который отлично работает:
[ComVisible(true)]
[ProgId("BlaBla.FilePicker")]
[Guid("xxx-xxx-xxx-xxx")]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IFilePicker))]
public class FilePicker : IFilePicker
{
public string Show()
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
return openFileDialog.FileName;
}
}
return string.Empty;
}
}
Однако я хотел бы показать (хотя бы некоторые) свойства OpenFileDialog
, чтобы я мог устанавливать начальные местоположения, фильтры и т. Д.
Это оказывается на удивление трудным. OpenFileDialog
является запечатанным классом, и его базовый класс FileDialog
не предназначен для наследования от.
Я мог бы просто выставить опции, жестко их закодировав, фактически имитируя свойства FileDialog
.
Но это кажется довольно неэффективным. В идеале я хотел бы просто наследовать некоторый базовый класс или интерфейс и просто реализовать это.
Это возможно?