Реализация OpenFileDialog с предварительным просмотром звукового файла - PullRequest
1 голос
/ 04 июня 2010

Я хотел бы реализовать диалоговое окно открытия файла или файловый браузер, который дополнительно предлагает кнопку «Предварительный просмотр» для воспроизведения выбранного в данный момент звукового файла (в частности, волнового формата, другие форматы не нужны для этого приложения).

  • Я мог бы создать свою собственную форму с различными элементами управления, такими как древовидная структура и список, чтобы показать папки и файлы, но я думаю, что я бы заново изобрел колесо или если бы больше ничего не потребовалось для чего-то очень простого. Вы рекомендуете делать это?
  • Могу ли я изменить (унаследовать) существующий OpenFileDialog и добавить к нему кнопку воспроизведения звука?
  • Существует ли какая-нибудь бесплатная библиотека пользовательских средств выбора файлов, которые можно использовать? (При условии, что лицензия допускает включение в коммерческом смысле.)

Ответы [ 3 ]

2 голосов
/ 04 июня 2010

Прежде чем увлекаться взломом диалогового окна, сначала рассмотрим простое решение, использующее событие FileOk. Создайте форму с именем, скажем, frmPreview. Дайте ему конструктор, который принимает строку. Для воспроизведения файла вам понадобится кнопка «Отмена», кнопка «ОК» и код.

Показать эту форму следующим образом:

        var dlg = new OpenFileDialog();
        // Set other dlg properties...
        dlg.FileOk += (s, cancel) => {
            using (var prev = new frmPreview(dlg.FileName)) {
                if (prev.ShowDialog() != DialogResult.OK) cancel.Cancel = true;
            }
        };
        if (dlg.ShowDialog(this) == DialogResult.OK) {
            // use the file
            //...
        }

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

2 голосов
/ 13 февраля 2017

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

    private void btnSelect_Click(object sender, RoutedEventArgs e) {
        var dlg = new Microsoft.Win32.OpenFileDialog {
            DefaultExt = ".csv",
            Filter = "Wav Files Only (*.wav)|*.wav",
            InitialDirectory = "C:\\Windows\\Media\\",
            CheckFileExists = true
        };
        dlg.FileName = "preselect the existing file if you wish";
        dlg.FileOk += (s, cancel) => {
            var player = new MediaPlayer();
            player.Open(new Uri(dlg.FileName));
            player.Play();
            var msgres = MessageBox.Show(Path.GetFileName(dlg.FileName)+"\nUse this sound?", "Sound Playing", MessageBoxButton.YesNo);
            if (msgres != MessageBoxResult.Yes) cancel.Cancel = true;
            player.Stop(); //in case it is a long sound
        };
        var result = dlg.ShowDialog();
        if (result != true) return;
        //do whatever with dlg.FileName ...
    }

Использование MessageBox обеспечивает чистый стандартный интерфейс

1 голос
/ 04 июня 2010

Что касается пункта 2, я думал, что OpenFileDialog (или SaveFileDialog) никак не могут быть расширены - они предоставляются ОС.

Но, оказывается, они могут быть:

Первый выглядит так, как вы хотите достичь.

Удачи.

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