C # WinForms - Multiselect не работает на OpenFileDialog & Listbox - PullRequest
0 голосов
/ 30 марта 2011

Привет всем, Извините, что беспокою вас об этом, но у меня проблема с выбором нескольких файлов xlsx через окно браузера файлов в приложении winforms при отладке, и я не могу понять, что я сделал неправильно.

Проблема: я установил Multiselect = true в OpenFileDialog, но я все еще не могу выбрать более одного файла.

  • Что мне нужно изменить, чтобы включить функцию multiSelect?
  • Нужно ли что-нибудь добавлять в методе sourceFileOpenFileDialog?
  • Нужно ли что-нибудь добавить в метод listBoxSourceFiles_SelectedIndexChanged, чтобы получить имена файлов для загрузки корректности в списке?

    // When the user clicks on Select Files Button, this happens  
    private void sourceFiles_Click(object sender, EventArgs e)
    {
        Stream myStream;
        int i = 0;
        OpenFileDialog sourceFileOpenFileDialog = new OpenFileDialog();
    
        this.sourceFileOpenFileDialog.InitialDirectory = "i:\\CommissisionReconciliation\\Review\\";
        this.sourceFileOpenFileDialog.Filter = "Excel Files (*.xls;*.xlsx;)|*.xls;*.xlsx;|" + "All Files (*.*)|*.*";
        this.sourceFileOpenFileDialog.FilterIndex = 2;
        this.sourceFileOpenFileDialog.RestoreDirectory = true;
        this.sourceFileOpenFileDialog.Multiselect = true;
        this.sourceFileOpenFileDialog.Title = "Please Select Excel Source File(s) for Consolidation";
    
        if (sourceFileOpenFileDialog.ShowDialog() == DialogResult.OK)
        {
            try
            {
                if ((myStream = sourceFileOpenFileDialog.OpenFile()) != null)
                {
                    using (myStream)
                    {
                        foreach (string FileName in sourceFileOpenFileDialog.FileNames)
                        {
                            sourceFileOpenFileDialog.FileNames[i] = FileName;
                            listBoxSourceFiles.Items.Add(FileName);
                            Log("Source Files: " + sourceFileOpenFileDialog.FileNames[i]);
                            i++;
                        }
                    }
                }
    
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
            }
    }
    
    //method for the listbox. Do I need anything here? 
    private void listBoxSourceFiles_SelectedIndexChanged(object sender, EventArgs e)
    {
    
    }
    
    //method for the sourceFileOpenFileDialog.  Do I need anything here?
    private void sourceFileOpenFileDialog_FileOk(object sender, CancelEventArgs e)
    {
    
    }
    

Я обновил код, чтобы отразить sourceFileOpenFileDialog, и MultiSelect или Title не работают ... Возможно, я неправильно ссылаюсь на onfiledialog? это правильный префикс для использования?

Спасибо за внимание!

Ответы [ 3 ]

4 голосов
/ 30 марта 2011

Вы используете два OpenFileDialogs. Вы отображаете sourceFilesList, но вы инициализировали sourceFileOpenFileDialog. Религиозное использование последовательных правил именования - отличный способ избежать ошибок, подобных этим.

Следующая проблема, что должен делать OpenFile (), когда вы выбрали более одного файла? Для чего фактически используется myStream?

1 голос
/ 30 марта 2011

Вы настраиваете sourceFileOpenFileDialog, но затем используете sourceFileList !!! Решайся и пользуйся только одним.

0 голосов
/ 30 марта 2011

Исправлено нерабочее MultiSelect:

  • Обновление кода для использования только одной переменной sourceFileOpenFileDialog в методе, а MultiSelect или Title не работали ...
  • Удаление всехссылки на myStream.myStream использовался в примере, который я основал на своем коде, но я вынул его, и MultiSelect работает!

Вот рабочий код:

    // When the user clicks on Select Files Button, this happens  
    private void sourceFiles_Click(object sender, EventArgs e)
    {
        Stream myStream;
        int i = 0;
        OpenFileDialog sourceFileOpenFileDialog = new OpenFileDialog();

        this.sourceFileOpenFileDialog.InitialDirectory = "i:\\CommissisionReconciliation\\Review\\";
        this.sourceFileOpenFileDialog.Filter = "Excel Files (*.xls;*.xlsx;)|*.xls;*.xlsx;|" + "All Files (*.*)|*.*";
        this.sourceFileOpenFileDialog.FilterIndex = 2;
        this.sourceFileOpenFileDialog.RestoreDirectory = true;
        this.sourceFileOpenFileDialog.Multiselect = true;
        this.sourceFileOpenFileDialog.Title = "Please Select Excel Source File(s) for Consolidation";

        if (sourceFileOpenFileDialog.ShowDialog() == DialogResult.OK)
        {
            try
            {
                string tempFolder = System.IO.Path.GetTempPath();

                foreach (string FileName in this.sourceFileOpenFileDialog.FileNames)
                {
                    this.sourceFileOpenFileDialog.FileNames[i] = FileName;
                    listBoxSourceFiles.Items.Add(FileName);
                    Log("Source Files: " + sourceFileOpenFileDialog.FileNames[i]);
                    i++;
                    System.IO.File.Copy(FileName, tempFolder + @"\" + FileName);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
            }
    }

    //method for the listbox. Do I need anything here? 
    private void listBoxSourceFiles_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    //method for the sourceFileOpenFileDialog.  Do I need anything here?
    private void sourceFileOpenFileDialog_FileOk(object sender, CancelEventArgs e)
    {

    }
...