【问题标题】:Function not working in Form Load, but works everywhere else功能在表单加载中不起作用,但在其他任何地方都有效
【发布时间】:2017-02-25 15:54:14
【问题描述】:

我正在使用下面的函数将项目添加到DataGridView

void addFiles(List<string> files)
{
    foreach (var item in filesFound)
    {
        if (File.Exists(item))
         {
            fileList.Add(item);
            MessageBox.Show(item);
            string p = GetFolderPath(Personal) + @"\Music Database\";
            Directory.CreateDirectory(p);
            string file="";
            try
            {
                StreamReader read = new StreamReader(p + "musicdatabase.txt");
                file = read.ReadToEnd();
                read.Close();
            }
            catch (Exception e)
            {
                if (e.ToString().Contains(""))
                {
                    //add error code here later
                }
            }

            StreamWriter write = new StreamWriter(p + "musicdatabase.txt");
            write.WriteLine(file + item);
            write.Close();

            dataGridView1.Rows.Add(getTitle(item), getArtist(item), getDuration(item), item);
        }
        else
        {
            //add file not found error code here
        }
    }
}

该功能运行良好。它完美地添加了细节。 getTitle();getArtist();getDuration(); 照他们说的做。他们使用 TagLib# 来获取音频文件的详细信息。音频文件的文件路径被写入用户文档中的文本文件。

当我加载表单时出现问题:我将文本文件作为一个整体读取,将每一行放入List&lt;string&gt; textlist = new List&lt;string&gt;(); 的新索引中。这可以。该列表包含每一行。然后我运行addFiles(textlist);。我启动程序并加载,但没有任何内容添加到 DataGridView

我感觉这可能与触发 Form_Load 时它可能没有加载有关。

private void Form1_Load(object sender, EventArgs e)
{
    string p = GetFolderPath(Personal) + @"\Music Database\musicdatabase.txt";
    //MessageBox.Show(p);
    //MessageBox.Show(File.Exists(p).ToString());
    if (File.Exists(p))
    {
        string[] text = File.ReadAllLines(p);
        List<string> textlist = new List<string>();
        textlist = text.ToList();
        // -- THIS PROVES THE textlist LIST CONTAINS ITEMS --
        //foreach (var item in textlist)
        //{
        //MessageBox.Show(item);
        //MessageBox.Show(textlist[0]);
        //}
        //THIS IS THE PROBLEM
        addFiles(textlist);
     }
 }

【问题讨论】:

  • 我建议填写catchclause看看如果什么都没发生会不会出错
  • 此代码不属于 Load 事件。无缘无故地让它变慢。最重要的是,它在 Win7 上是有风险的,你不会看到异常。将它移到构造函数中。
  • @John 删除try{...} catch{...}时仍然没有错误
  • @HansPassant 这只是为了我测试代码。我将为Save...Open... 添加一个选项

标签: c# winforms function datagridview taglib-sharp


【解决方案1】:

你的问题在这里:

    foreach (var item in filesFound)

您引用的似乎是一个名为 filesFound 的全局变量, 而不是传递给函数的变量files

【讨论】:

  • 这就是问题所在!
  • 很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 2021-08-19
相关资源
最近更新 更多