【问题标题】:OpenFileDialog is not opening the file [closed]OpenFileDialog 没有打开文件[关闭]
【发布时间】:2016-02-08 18:07:34
【问题描述】:

我已经用按钮绑定了 openFileDialog 控件。在按钮事件中,我正在调用 openFileDialog 控件。

现在,当我运行我的应用程序时,openFileDialog 框会打开,但不会选择文件。打开按钮不起作用。

示例代码:

    private void button1_Click(object sender, EventArgs e)
    {
       openFileDialog1.ShowDialog();

    }

    private void openFileDialog1_FileOk_1(object sender, CancelEventArgs e)
    {
        // logic written here
    }

之前还可以,现在不行了。

【问题讨论】:

  • 把你的代码放在你打开这个对话框的地方
  • 单击“打开”时究竟会发生什么,您预计会发生什么?
  • 您能否提供一个代码示例来说明您如何调用此对话框?显示对话框后,你对结果做了什么?
  • “打开按钮不起作用”意味着什么?错误?结果无效?是“桌面上的datasheet.xlsx?
  • 我认为人们来这里只是为了在编辑问题时获得声誉。这个问题更容易理解。谢谢你这样做。我会自己解决的。

标签: c# openfiledialog


【解决方案1】:

您需要使用DialogResult 来获取用户打开确认的事件。然后您可以使用流来读取文件。下面是一些示例代码(MS在MSDN中提供——来源:https://msdn.microsoft.com/en-us/library/system.windows.forms.openfiledialog(v=vs.110).aspx):

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

    openFileDialog1.InitialDirectory = "c:\\" ;
    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)
                {
                    // Some logic here
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: Failed to open file. Original error: " + ex.Message);
        }
    }
}

【讨论】:

  • 这是this MSDN article 中提供的示例。 @AshishSharma 您可以阅读有关如何正确实施的更多细节。
  • 如果你要从某个来源发布代码,你应该始终相信它......不管它多么简单
【解决方案2】:

回答帖子编辑

包含的代码显示方法openFileDialog1_FileOk_1 最后的“_1”向我表明您在绑定事件时遇到了一些问题。也许在某个时候openFileDialog1_FileOk 的方法引起了冲突。

您应该检查方法是否正确绑定到事件。

为此,我会将您转给我对How to change the name of an existing event handler?的答复

对于抽象,您想查看事件绑定了什么方法。您可以从属性面板执行此操作,或者通过检查表单设计器文件(命名为 .Designer.cs 例如:Form1.Designer.cs)。

附录:考虑在事件处理程序中添加断点。它将允许您逐步调试正在发生的事情。此外,它会让您注意到事件处理程序是否根本没有被执行,这表明该方法未正确绑定到事件。


原答案

OpenFileDialog 不打开文件,它几乎不选择文件,并使选择可供您的应用程序执行您的应用程序打算对这些文件执行的任何操作。

以下是上面链接的 MSDN 文章中的使用模式:

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
        );
    }
}

现在,请注意在检查ShowDialog 的结果之后 - 一旦关闭对话框就会返回 - 代码使用方法 OpenFile 实际打开文件。结果是您可以随意处理的流。

或者,您可以通过属性FileNames 检索选定的文件,该属性返回一个字符串数组。如果您已将对话框配置为仅允许选择单个文件,则可以改用FileName


附录,如果“打开”是指调用与所选文件关联的默认应用程序来打开文件。您可以通过将文件路径传递给 System.Diagnostics.Process.Start 来完成此操作。

【讨论】:

    【解决方案3】:
        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        string name = openFileDialog1.FileName;
    object objOpt = Type.Missing;
                    var excelApp = new Excel.Application();
                    Excel.Workbook wbclass = excelApp.Workbooks.Open(name, objOpt, 
                                                                    true,
                                                                    objOpt,
                                                                    objOpt,
                                                                    objOpt,
                                                                    objOpt,
                                                                    objOpt,
                                                                    objOpt,
                                                                    objOpt,
                                                                    objOpt,
                                                                    objOpt,
                                                                    objOpt,
                                                                    objOpt,
                                                                    objOpt);
    
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 2010-11-21
      • 2012-12-16
      • 2012-09-27
      • 1970-01-01
      • 2017-05-26
      • 2015-01-11
      • 1970-01-01
      相关资源
      最近更新 更多