0

シンプルな mp3 プレーヤーを作ろうとしています。

 listBox2.Items.Add(openFileDialog1.FileName);

リストボックスに曲を追加するには機能していますが、ファイルディレクトリが表示されるので、このように変更しました

listBox2.Items.Add(openFileDialog1.SafeFileName);

リストボックス1の曲名に見えますが、再生ボタンをクリックしても機能しません:(

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication12222
{
    public partial class Form1 : Form
    {
        [DllImport("winmm.dll")]
        private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);
        public string Pcommand;
        public bool isOpen;
        public Form1()
        {
            InitializeComponent();
        }

        public void Stop()
        {
            Pcommand = "close MediaFile";
            mciSendString(Pcommand, null, 0, IntPtr.Zero);
            isOpen = false;
        }

        public void Start()
        {
            Pcommand = "open \"" + listBox1.SelectedItem + "\" type mpegvideo alias MediaFile";
            mciSendString(Pcommand, null, 0, IntPtr.Zero);
            isOpen = true;
            Play(true);
        }

        private void button10_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "Media File(*.mpg,*.dat,*.avi,*.wmv,*.wav,*.mp3)|*.wav;*.mp3;*.mpg;*.dat;*.avi;*.wmv";
            openFileDialog1.ShowDialog();

            if (openFileDialog1.FileName != ""){

               // listBox1.Items.Add(openFileDialog1.SafeFileName);

                listBox2.Items.Add(openFileDialog1.FileName);
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Start();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Stop();
        }
        public void Play(bool loop)
        {
            if (isOpen)
            {
                Pcommand = "play MediaFile";
                if (loop)
                    Pcommand += " REPEAT";
                mciSendString(Pcommand, null, 0, IntPtr.Zero);
            }
        }
        int x;
        private void button2_Click(object sender, EventArgs e)
        {

            if (listBox1.SelectedIndex ==listBox1.Items.Count-1 ) { x++; }
            else
            {
                Stop();
                listBox1.SelectedIndex = listBox1.SelectedIndex + 1;

                Start();
            }
        }
        int y;
        private void button5_Click(object sender, EventArgs e)
        {

            if (listBox1.SelectedIndex ==0) { y++; }
            else
            {
                Stop();
                listBox1.SelectedIndex = listBox1.SelectedIndex - 1;

                Start();
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            listBox1.SelectedIndex = 0;

            Stop();
            Start();
        }

        private void button6_Click(object sender, EventArgs e)
        {
            listBox1.SelectedIndex = listBox1.Items.Count - 1;
            Stop();
            Start();
        }

        private void button9_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            Pcommand = "close MediaFile";
            mciSendString(Pcommand, null, 0, IntPtr.Zero);
            isOpen = false;
        }

        private void button8_Click(object sender, EventArgs e)
        {

        }

        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {

        }

    }
}

追加の質問は、リストボックスを (ランダムに) ミックスすることは可能ですか? mp3 プレーヤーに曲を追加してから、ミックス ボタンをクリックしたいときにリストをミックスしたいのですが、このためのリストボックス コマンドはありますか?

4

2 に答える 2

2

カスタム クラスを作成します。

public class FileItem
{
    public string FilePath { get; set; }
    public string ShortName { get; set; }
}

からファイルを取得するときにこのクラスの新しいインスタンスを作成し、 toプロパティOpenFileDialogを保存してから、メソッドを使用して短いファイル名を取得します。openFileDialog1.FileNameFilePathWindows.IO.Path.GetFileName()

ファイル パスを からListBox直接OpenFileDialogに追加するのではなく、クラスのこのインスタンスを追加します。

DisplayMemberのプロパティを に変更するListBox"ShortName"、ファイル パスの「短い名前」が に表示されますListBox

于 2012-12-16T17:23:04.390 に答える
1

以下のリンクを使用して、プレイリストをシャッフルできるはずです。

ランダム プレイリスト アルゴリズム

ありがとう、海軍

于 2012-12-16T18:10:54.527 に答える