函数在 Form Load 中不起作用,但在其他任何地方都起作用
Function not working in Form Load, but works everywhere else
我正在使用下面的函数将项目添加到 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);
}
}
您的问题在这里:
foreach (var item in filesFound)
您正在引用一个名为 filesFound 的全局变量,
而不是传递给函数的变量 files
。
我正在使用下面的函数将项目添加到 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);
}
}
您的问题在这里:
foreach (var item in filesFound)
您正在引用一个名为 filesFound 的全局变量,
而不是传递给函数的变量 files
。