c# - C# 中的播放列表 (axWindowsMediaPlayer)

标签 c# winforms media-player

我有这个 FolderBrowseDialog

  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 播放列表中。我将如何实现这一目标?

最佳答案

ListViewItemCollection没有实现通用 ICollection<T>IEnumerable<T>接口(interface),因此编译器无法通过查看 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;

当您遍历 listView1.Items 时在foreach使用隐式类型变量 ( var ) 循环,然后 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 }";)这显然是行不通的。

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

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

但我认为这在很大程度上违背了使用 var 的意义。首先。

关于c# - C# 中的播放列表 (axWindowsMediaPlayer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18752826/

相关文章:

c# - 声音到 3 个主要频率(低、中、高)

c# - 在调整父级大小时调整子窗体控件的大小

带有 onclickListener 的 Android 页脚

android - Mediaplayer 有时不起作用

c# - 根据条件从 DataTable 中删除行

c# - 如何以与 Windows 资源管理器中相同的顺序从目录中获取文件?

c# - 读取文件,搜索术语并替换该术语的所有行

c# - 将我的项目中的表单添加到另一个项目

android - android.media.MediaPlayer 的缓冲问题

c# - 可以在 Visual Studio 的输出窗口中查看 OutputDebugString 的输出吗?