功能在Form Load中不起作用,但在其他地方起作用

时间:2017-02-25 15:54:15

标签: c# winforms function datagridview taglib-sharp

我使用以下功能将项目添加到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<string> textlist = new List<string>();的新索引中。这可以。该列表包含每一行。然后我运行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);
     }
 }

2 个答案:

答案 0 :(得分:1)

你的问题在这里:

    foreach (var item in filesFound)

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

答案 1 :(得分:0)

在以下行设置断点:

      dataGridView1.Rows.Add(getTitle(item), getArtist(item), getDuration(item),     item);

断点是否会被击中?

相关问题