1

C# で作成されたメディア プレーヤーでいくつかの問題が発生しています。ここで、stackoverflow で別の問題を既に要求していましたが、今は別の問題があり、それが最後の問題だと思います。

MP3 や WAV ファイルを Windows フォームのリストボックスにドラッグ アンド ドロップしたいのですが、正しくドロップできますが、ファイルのフル パスを表示しないと再生できません。

これまでに行ったことは次のとおりです。

private void listBox1_DragDrop(object sender, DragEventArgs e)
    {

        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
        foreach (string m in files)
        {
            listBox1.Items.Add(Path.GetFileNameWithoutExtension(m));
            mediaList.Add(m);
        }

mediaListは、プレイリストを保存するのに役立つリストです。 listbox1がメインのプレイリストです。

曲を再生するには、このコードを使用します。これは今までうまく機能しています。

axWindowsMediaPlayer1.URL = mediaList[listBox1.SelectedIndex];

前もって感謝します。-ChrisCreateBoss

4

1 に答える 1

0

リストボックスの項目にはオブジェクトを含めることができます。フルネームにアクセスしたいがファイル名のみを表示したいので、このクラスはドロップされたフルネームを保存しますが、ファイル名の部分のみを表示します。これらは、アイテムごとに保存する情報がいくつかある場合に便利です。

class FileItem
{
    public string FullName { get; set; }
    public FileItem(string file)
    {
        FullName = file;
    }

    public override string ToString()
    {
        return Path.GetFileNameWithoutExtension(FullName);
    }
}

名前全体が保存されますが、オーバーライドを使用して短い名前のみが表示されます。ファイルがドロップされると、それらから FileItem オブジェクトが作成されます。次に、2 つの選択肢があり
ます。a) オブジェクトを ListBox に配置して mediaList を削除するか、
b) 新しいアイテムを medialist に配置して、それを DataSource として使用します。

mediaList は UI に接着されていないため、これは 2 番目の処理になります。次のように変更mediaListしてください。

// new mediaList 
List<FileItem> mediaList = new List<FileItem>();
...
private void lb1_DragDrop(object sender, DragEventArgs e)
{
    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
    foreach (string f in files)
    {
        mediaList.Add(new FileItem(f));
    }
    // tell the LB to display whatever is in mediaList
    lb1.DataSource = mediaList;
}

ファイルの2 つのコピーではなく、whats inmediaListも に表示されListBoxます。その中のFileItemオブジェクトには短い名前だけが表示されます。元のコードは微調整で機能するはずです。

axWindowsMediaPlayer1.URL = mediaList[lb1.SelectedIndex].FullName;

それ以外の場合は、DataSource がないItems場合は、元のフル パス名を取得するために、にキャストバックし、FileItemFullName を使用する必要があります。

FileItem fil = (FileItem) lb1.Items[lb1.SelectedIndex];
axWindowsMediaPlayer1.URL = fil.FullName;

// or 
axWindowsMediaPlayer1.URL = ((FileItem)lb1.SelectedItem).FullName;
于 2015-01-17T00:49:49.010 に答える