【问题标题】:C# adding a browse function along with a Drag and Drop boxC# 添加浏览功能和拖放框
【发布时间】:2018-09-25 04:23:07
【问题描述】:

所以我已经有了一个可以打开 .csv 文件的有效拖放框。我还想添加一个打开文件的 openfiledialog 方法。在我的拖放功能中,我有:

    private void panel1_DragDrop(object sender, DragEventArgs e)
    {
        Console.WriteLine("Here 1");
        firstTimeThrough = true;
        timer.Stop();

        if (browseRecordFiles == true)
        {
            files = (string[])e.Data.GetData(fileLocation, false);
        } else
        {
            files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
        }

显然 ...GetData(fileLocation, false);不能在这里工作。对此有不同的解决方法吗?我有一个 ForEach 循环,然后遍历“文件”,这就是为什么我希望它以这种方式工作。

“browseRecordFiles”是一个布尔值,如果单击“浏览”按钮则为真。

即:fileLocation 将是 c:\users\Administrator\desktop\something.csv

编辑:我一个按钮可以打开文件对话框,但是我有一个 ForEach 循环,如下所示:

                foreach (string file in files)
                {

                    try
                    {
                        using (var reader = new StreamReader(file))         // reading the file
                        {
                            while (!reader.EndOfStream)             // Read until the end of the stream
                            {
                                var line = reader.ReadLine().Replace("\"", "");
                                //Console.WriteLine(line);
                                var values = line.Split(',', ' ');   // Ignore the , in the .CSV file and start next read column

                                foreach (var k in values)
                                {
                                    //Console.WriteLine(k);
                                }


                                data.Add(values);             // Add all values to data list
                            }

Files 是一个字符串数组,但仅保存拖放文件的文件路径。有没有办法通过从打开文件对话框中获取文件路径来“模仿”这种情况,就像用户将文件拖放到它上面一样?

【问题讨论】:

  • 这是 Windows 窗体吗?如果是这样,您应该用它来标记问题。
  • void panel1_DragDrop 在文件被删除时触发。你需要一个button_Clicked,当点击按钮打开文件对话框时触发。

标签: c# .net winforms


【解决方案1】:

假设这是一个 Windows 窗体应用程序...

  1. 在您的表单上放置一个按钮(或以其他方式表示他想要打开文件(例如,带有打开条目的文件菜单)
  2. 在您的表单上放置一个OpenFileDialog 控件。它将被命名为openFileDialog1
  3. 在对话框控件的属性中,将DefaultExt 设置为csv,将Filter 设置为Comma-Separated Files|*.csv|All Files (*.*)|*.*
    • 您可能想要设置其他属性,例如Title
  4. 双击您的新按钮,创建一个按钮Click 处理程序并打开该位置的代码文件。
  5. 在处理程序中,输入如下代码:

这是一个标准的打开文件处理程序:

  private void OpenFileBtn_Click(object sender, EventArgs e)
  {
      //you may want to set the default `InitialDirectory` property
      if (openFileDialog1.ShowDialog() == DialogResult.OK)
      {
         //do something with the information from the OpenFileDialog
         //in particular, you are going to want to read the `FileName` property
      }
 }

如果您希望用户能够一次打开多个文件,请设置MultiSelect 属性。

要使用这些多次选择的文件名,请查看对话框的FileNames 属性。它是用户选择的文件名(完整文件和路径名)的集合。遍历该列表并调用 File.ReadAllTextFile.ReadAllLines 以获取 CSV 文件的内容。

【讨论】:

  • 我已经完成了。我有从 OFD 中选择的文件的文件名/路径,但现在我需要“模仿”或打开它,类似于拖放操作;像 (string[])e.Data.GetData(DataFormats.FileDrop, false);
  • 我用一个额外的段落更新了我的答案。这是否回答你的问题?顺便说一句,我在您进行编辑之前回答了这个问题(我认为)。使用File.ReadAllXxx 调用之一将比您从剪贴板中提取内容更容易
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多