C# 中的播放列表 (axWindowsMediaPlayer)

问题描述 投票:0回答:3

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

c# winforms media-player
3个回答
4
投票

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;

当您使用隐式类型变量 (

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
的大部分意义。


1
投票

这样的东西应该有效:

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;

0
投票

我需要帮助在我的 mp3 播放器上制作保存和加载播放列表。 我尝试了这段代码,但在 C# winform 中不起作用 预先感谢

        private void saveToolStripMenuItem1_Click(object sender,EventArgs e)
 {
       var myplaylist = myplayer.playlistCollection.newPlaylist("minhalista");

        foreach(ListViewItem mp3 in listBoxMp3.Items)
        {
            var mp3Item = myplayer.newMedia(mp3.Text);

            myplaylist.appendItem(mp3Item);                                
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.