[英]How can I access control created within if-statement from outside if-statement in C# WinForms?
我正在将音乐播放列表从磁盘加载到C#ListView控件。 我正在使用ListViewGroups来分离专辑,并且播放列表中可以有多个专辑。
播放列表以以下文本格式保存:(我知道这不是最好的方法,但适用于此示例)
|album|name of album
track 1 fsdfsfasf.mp3
track 2 fdsgfgfdhhh.mp3
track 3 gfdgsdgsdfgs.mp3
将播放列表加载到ListView时,我会测试字符串“ | album |” 从行的开头找到,并将该行用作组标题文本。 下面的代码示例:
using (StreamReader reader = File.OpenText("playlist.txt"))
{
while (reader.Peek() >= 0)
{
result = reader.ReadLine();
if (result.Substring(0, 7) == "|album|")
{
ListViewGroup group = new ListViewGroup();
group.Header = result.Substring(7);
lstPlaylist.Groups.Add(group); // lstPlaylist is existing ListView control for playlist
}
else
{
ListViewItem item = new ListViewItem(result, 0, group);
lstPlaylist.Items.Add(item);
}
}
}
如果是“ |专辑|” 找到字符串,然后创建新的ListViewGroup。 但是在else语句中无法访问该组(我无法将项目分配给组),因为它不在范围内。 如何在if语句内创建新的ListViewGroup并在if语句外使用它?
您需要在if语句外声明变量,以便在else子句中可用。 您还需要处理在专辑之前找到曲目的情况,除非您已经验证了源文件。
using (StreamReader reader = File.OpenText("playlist.txt"))
{
ListViewGroup group = null;
while (reader.Peek() >= 0)
{
result = reader.ReadLine();
if (result.Substring(0, 7) == "|album|")
{
group = new ListViewGroup();
group.Header = result.Substring(7);
lstPlaylist.Groups.Add(group); // lstPlaylist is existing ListView control for playlist
}
else
{
if (group != null)
{
ListViewItem item = new ListViewItem(result, 0, group);
lstPlaylist.Items.Add(item);
}
else
{
// you are trying to add a track before any group has been created.
// handle this error condition
}
}
}
}
您必须首先在if语句外声明变量,然后在if语句内给它任何值。 如果要在if和else中使用相同的值,则在外部。
基本上发生的事情是,如果转到代码的else部分,则永远不会生成该变量,因为该变量是在if部分中创建和初始化的。
祝好运!
查看您的逻辑,无论哪种情况,都需要初始化ListViewGroup
。 如果找到单词“ |专辑|” 然后您还要分配一个属性值。 因此,一个简单的解决方法是将变量向上移动以增加其范围:
ListViewGroup group = new ListViewGroup();//move to here
if (result.Substring(0, 7) == "|album|")
{
group.Header = result.Substring(7);
lstPlaylist.Groups.Add(group); // lstPlaylist is existing ListView control for playlist
}
else
{
ListViewItem item = new ListViewItem(result, 0, group);//now group is initialized here as well
lstPlaylist.Items.Add(item);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.