【问题标题】:C# WinForms - Multiselect not working on OpenFileDialog & ListboxC# WinForms - 多选在 OpenFileDialog 和列表框上不起作用
【发布时间】:2011-07-25 15:14:14
【问题描述】:

大家好, 很抱歉打扰您,但我在调试时通过 winforms 应用程序中的文件浏览器窗口选择多个 xlsx 文件时遇到问题,无法弄清楚我做错了什么。

问题:我在 OpenFileDialog 下设置了 Multiselect=true,但我仍然无法选择多个文件。

  • 我需要进行哪些更改才能使多选功能正常工作?
  • 是否需要在 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 错误?这是使用正确的前缀吗?

感谢收看!

【问题讨论】:

    标签: c# winforms listbox openfiledialog multi-select


    【解决方案1】:

    您正在使用两个 OpenFileDialogs。您显示 sourceFilesList 但初始化了 sourceFileOpenFileDialog。虔诚地使用一致的命名规则是避免此类错误的好方法。

    下一个问题,当您选择多个文件时,OpenFile() 应该做什么? myStream 的实际用途是什么?

    【讨论】:

    • @HansPassant,感谢您的回复。我将 OpenFileDialog 重命名为 OpenFileDialog sourceFileOpenFileDialog = new OpenFileDialog();并且多选仍然不起作用。还有其他建议吗?
    • 我看不到您所做的更改。
    • @HansPassant,这只是 1 行代码。我编辑了问题中的代码供您查看。
    • sourceFilesList 也用于其余代码。替换所有个。并完全摆脱 sourceFilesList ,这样它就不会再给你字节了。
    • @HansPassant,哦,我的错,我忘了替换问题中的其他行,但我使用了 Visual Studio 重命名功能,它为我自动重命名了所有名称关联。再次编辑有问题的代码以反映我所拥有的。它仍然不起作用。还有其他建议吗?
    【解决方案2】:

    您正在设置 sourceFileOpenFileDialog 但随后使用 sourceFileList !!!下定决心,只使用一个。

    【讨论】:

    • 感谢您的回复。我将 OpenFileDialog 重命名为 OpenFileDialog sourceFileOpenFileDialog = new OpenFileDialog();并且多选仍然不起作用。还有其他建议吗?
    【解决方案3】:

    通过以下方式修复了不工作的 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)
        {
    
        }
    

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 2012-02-07
      • 2010-11-17
      相关资源
      最近更新 更多