/// <summary>
        /// See base class docs.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="provider"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            var result = value as string ?? "";

            string folder = null;
            if(!String.IsNullOrEmpty(result)) folder = Path.GetDirectoryName(result);
            if(!Directory.Exists(folder)) folder = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);

            var fileNameBrowserAttribute = context.PropertyDescriptor.Attributes.OfType<FileNameBrowserAttribute>().FirstOrDefault();
            if(fileNameBrowserAttribute == null) fileNameBrowserAttribute = new FileNameBrowserAttribute();

            using(var dialog = new OpenFileDialog() {
                AddExtension = fileNameBrowserAttribute.AddExtension,
                AutoUpgradeEnabled = true,
                CheckFileExists = fileNameBrowserAttribute.CheckFileExists,
                DefaultExt = fileNameBrowserAttribute.DefaultExtension,
                FileName = result,
                Filter = fileNameBrowserAttribute.Filter,
                InitialDirectory = folder,
                Multiselect = false,
                Title = String.IsNullOrEmpty(fileNameBrowserAttribute.BrowserTitle) ? "" : Localise.GetLocalisedText(fileNameBrowserAttribute.BrowserTitle),
            }) {
                if(dialog.ShowDialog() == DialogResult.OK) result = dialog.FileName;
            }

            return result;
        }
        /// <summary>
        /// See base class docs.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="provider"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            var result = value as string ?? "";

            string folder = null;

            if (!String.IsNullOrEmpty(result))
            {
                folder = Path.GetDirectoryName(result);
            }
            if (!Directory.Exists(folder))
            {
                folder = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
            }

            var fileNameBrowserAttribute = context.PropertyDescriptor.Attributes.OfType <FileNameBrowserAttribute>().FirstOrDefault();

            if (fileNameBrowserAttribute == null)
            {
                fileNameBrowserAttribute = new FileNameBrowserAttribute();
            }

            using (var dialog = new OpenFileDialog()
            {
                AddExtension = fileNameBrowserAttribute.AddExtension,
                AutoUpgradeEnabled = true,
                CheckFileExists = fileNameBrowserAttribute.CheckFileExists,
                DefaultExt = fileNameBrowserAttribute.DefaultExtension,
                FileName = result,
                Filter = fileNameBrowserAttribute.Filter,
                InitialDirectory = folder,
                Multiselect = false,
                Title = String.IsNullOrEmpty(fileNameBrowserAttribute.BrowserTitle) ? "" : Localise.GetLocalisedText(fileNameBrowserAttribute.BrowserTitle),
            }) {
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    result = dialog.FileName;
                }
            }

            return(result);
        }