Смена каталога в диалоге открытия файла программно - PullRequest
0 голосов
/ 03 мая 2010

У меня есть настроенный OpenFileDialog (VS2008, C #, Windows Forms) с ComboBox.ComboBox будет иметь список путей, которые может выбрать пользователь.

Мой вопрос, есть ли способ изменить каталог в диалоге открытия файла, чтобы он указывал на путь в выбранном элементе комбинированного списка.

InitialDirectory работает только до того, как я открою диалоговое окно, я хотел, чтобы после его открытия диалоговое окно изменилось.

Спасибо

Ответы [ 3 ]

1 голос
/ 03 мая 2010

Если вы используете Vista или Windows 7 с .NET 3.5 с пакетом обновления 1 (SP1), я рекомендую использовать свойство CustomPlaces в OpenFileDialog, а не настраиваемое поле со списком.

См. Эту статью MSDN (для WPF): http://msdn.microsoft.com/en-us/library/microsoft.win32.filedialog.customplaces(v=VS.100).aspx

Или эта статья MSDN (для Windows Forms): http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.customplaces(v=VS.100).aspx

В Windows 2000 и XP также можно настроить боковую панель мест. Но это сложнее и требует от вас использования некоторого кода на C ++ (лучше всего использовать CLI / C ++). Техника подробно описана в этой статье MSDN: http://msdn.microsoft.com/en-us/magazine/cc300434.aspx

Если вы не можете использовать поле со списком, которое вы добавили в OpenFileDialog, то вам, вероятно, просто нужно знать, какое сообщение Windows отправить в диалоговое окно. Боюсь, я не знаю, какое сообщение нужно отправить. Неприятные внутренние детали Win32 API диалогового окна Common Open / Save подробно описаны здесь: http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx

Если вы можете выяснить, какие сообщения отправлять окну, вероятный способ сделать это - заполнить текстовое поле имени файла каталогом, который вы хотите переключить, чтобы имитировать нажатие кнопки ОК. Диалог переключится на этот каталог, если вы сделаете это.

Отправка сообщений в это окно, вероятно, потребует от вас не использовать OpenFileDialog напрямую, а вместо этого создать подкласс абстрактного класса FileDialog, на котором оно основано.

0 голосов
/ 03 мая 2010

Как уже говорилось, InitialDirectory работает до этого, но зачем вам менять папку после слова? FileOpenDialog - это модальное диалоговое окно, поэтому пользователь не может использовать ничего другого из вашего приложения, кроме диалогового окна. В чем выгода и причина, по которой вы не хотите устанавливать папку? Кажется, вы используете не те инструменты, чтобы выполнить работу.

0 голосов
/ 03 мая 2010

Просто установите свойство InitialDirectory для openFileDialog1

private void button1_Click(object sender, System.EventArgs e)
{
    Stream myStream = null;
    OpenFileDialog openFileDialog1 = new OpenFileDialog();

    openFileDialog1.InitialDirectory = cmbPath.SelectedValue.ToString();
    openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
    openFileDialog1.FilterIndex = 2 ;
    openFileDialog1.RestoreDirectory = true ;

    if(openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        try
        {
            if ((myStream = openFileDialog1.OpenFile()) != null)
            {
                using (myStream)
                {
                    // Insert code to read the stream here.
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
        }
    }
}
...