C# 中的播放列表 (axWindowsMediaPlayer)

本文关键字:axWindowsMediaPlayer 播放列表 | 更新日期: 2023-09-27 18:30:56

>我有这个文件夹浏览对话框

  FolderBrowserDialog fbd = new FolderBrowserDialog();
        fbd.ShowNewFolderButton = true;
        fbd.RootFolder = Environment.SpecialFolder.MyComputer;
        if (fbd.ShowDialog() == DialogResult.OK)
        {
            string folder = fbd.SelectedPath;
            foreach (string f in Directory.GetFiles(folder))
                this.listView1.Items.Add(f);  
        }

我想将ListView1中的所有歌曲添加到axwindowsmediaplayer播放列表中。我将如何实现这一目标?

C# 中的播放列表 (axWindowsMediaPlayer)

>ListViewItemCollection不实现泛型ICollection<T>IEnumerable<T>接口,因此编译器无法通过查看Items集合来猜测类型。因此,为什么您必须显式告诉 foreach 循环它正在迭代类型 ListViewItem 的集合,而不是使用 var

因此,以下代码有效:

var myPlayList = 
      axWindowsMediaPlayer1.playlistCollection.newPlaylist("MyPlayList");
foreach (ListViewItem media in listView1.Items)
{
      var mediaItem = axWindowsMediaPlayer1.newMedia(media.Text);
      myPlayList.appendItem(mediaItem);
}
axWindowsMediaPlayer1.currentPlaylist = myPlayList;

当您使用隐式类型变量 (var) 在 foreach 循环中遍历listView1.Items时,media被视为object。所以当你调用ToString()时,你实际上是在ListViewItem上调用它。与许多其他 .NET 类一样,ListViewItem重写了 System.Object.ToString() 方法。看起来像这样:

public override string ToString()
{
    return "ListViewItem: {" + this.Text + "}";
}

因此,当您使用 foreach (var media in listView1.Items) 并调用axWindowsMediaPlayer1.newMedia(media.ToString())时会发生什么,您实际上是在调用axWindowsMediaPlayer1.newMedia("ListViewItem: { C:''Users''...''file.mp3 }";)这显然不起作用。

但是,可以通过将要迭代的每个项强制转换为ListViewItem来成功使用var,如以下代码所示。

        foreach (var media in listView1.Items)
        {
            var fileLocation = (ListViewItem)media; // This step is critical!
            var mediaItem = axWindowsMediaPlayer1.newMedia(fileLocation.Text);
            myPlayList.appendItem(mediaItem);
        }

但我认为这首先违背了使用var的大部分意义。

这样的事情应该可以工作:

var pathToFiles = "Path to where the media files are stored";
var mediaPlayer = new AxWMPLib.AxWindowsMediaPlayer();
var myPlaylist = mediaPlayer.playlistCollection.newPlaylist("myPlaylist");
foreach (ListViewItem fileName in listView1.Items) {
  var media = mediaPlayer.newMedia(Path.Combine(pathToFiles, fileName.Text);
  myPlaylist.appendItem(media);
}
mediaPlayer.currentPlaylist = myPlaylist;
相关文章:
  • 没有找到相关文章