Другие языки программирования и технологии

Аудио Плеер С#

Здравствуйте, пишу аудио плеер на С#, на основе Windows Player, для курсовой работы. Помогите пожалуйста, со следующим : 1) не могу реализовать автоматическое воспроизведение песен, после окончания текущего трека.
2) не могу добавить папку с треками. 3) моя форма закреплена в одном месте, не могу передвигать ее по всему экрану .
Буду очень благодарен!!!!
Вот соответственно сам код плеера:

namespace Music_Player_App
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void panel1_Paint(object sender, PaintEventArgs e)
{

}

private void lblLogo_Click(object sender, EventArgs e)
{

}
//Создать глобальные переменные массива типа String для сохранения названия или название песни и в путь дорожку
String[] path, files;

private void pictureBox2_Click(object sender, EventArgs e)
{
//Код для закрытия приложения
this.Close();

}

private void btnSelectSongs_Click(object sender, EventArgs e)
{
//Код для выбора песен
OpenFileDialog ofd = new OpenFileDialog();
//Код для выбора файлов
ofd.Multiselect = true;
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{

files = ofd.SafeFileNames;//сохранить имя трека в массиве файлов
path = ofd.FileNames;//Сохранить путь треков в массиве путей
//Отображение названий музыки в списке
for (int i = 0; i < files.Length; i++)
{
listBoxSongs.Items.Add(files[i]);//отображение songs в списке
}
}
}

private void listBoxSongs_SelectedIndexChanged(object sender, EventArgs e)
{
//Напишите код для воспроизведения музыки
axWindowsMediaPlayerMusic.URL = path[listBoxSongs.SelectedIndex];

}

private void pictureBox1_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}

private void pictureBox4_Click(object sender, EventArgs e)
{

}

private void Form1_Load(object sender, EventArgs e)
{
Form1 MyFrm1 = new Form1();
Point point = new Point(Location.X, Location.Y);
MyFrm1.Location = point;
}

private void pictureBox4_Click_1(object sender, EventArgs e)
{
listBoxSongs.SelectedIndex = listBoxSongs.SelectedIndex < listBoxSongs.Items.Count - 1? listBoxSongs.SelectedIndex + 1 : 0;//следующая песня
pictureBox4.BackColor = Color.MediumSpringGreen;
}

private void pictureBox3_Click(object sender, EventArgs e)
{
listBoxSongs.SelectedIndex = listBoxSongs.SelectedIndex > listBoxSongs.Items.Count - 1? listBoxSongs.SelectedIndex + 1 : 0;//предыдущая песня
{
pictureBox3.BackColor = Color.MediumSpringGreen;
}
}

private void axWindowsMediaPlayerMusic_Enter(object sender, EventArgs e)
{

}
}
}
У проигрывателя есть событие MediaEnded - сделайте смену композиции при этом событии.
https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.media.mediaplayer.mediaended?view=netcore-3.0

Двигать окно не можете - посмотрите что у Вас с границами окна у формы и заголовком. Если их нет - есс-но таскать такую форму будет проблематично - надо писать свой обработчик. Варианты:
https://stackoverflow.com/questions/1592876/make-a-borderless-form-movable

1ый вариант - отправляет события мыши на загловок окна, который невидим (старенькая техника =)
(не кроссплатформенно)

2ой вариант - кроссплатформенный, стандартный захват координат нажатия и отслеживания MouseMove
Я-бы выбрал этот.

3ий не кроссплатформенный, перекрывает обработчик WndProc
АП
Александр Пономарев
84 764
Лучший ответ
WMP сам умеет переключаться на следующий трек, так что ничего реализовывать не нужно.
Что нужно, так это удалить весь этот твой говнокод с массивами string и PictureBox-ами. У WMP уже есть свой собственный плейлист - вот его и используй. Всё что для этого нужно - обработчики двух событий: нажатия кнопки btnSelectSongs и события PlaylistChange у плеера (axWindowsmediaPlayerMusic). В первом делаем добавление выбранных файлов в плейлист:

using WMPLib; //не забудь добавить это пространство имён

private void btnSelectSongs_Click(object sender, EventArgs e)
{
var ofd = new OpenFileDialog();
ofd.Multiselect = true;
if (ofd.ShowDialog() == DialogResult.OK) {
axWindowsMediaPlayerMusic.currentPlaylist.clear();
foreach (var file in ofd.FileNames) {
IWMPMedia media = axWindowsMediaPlayerMusic.newMedia(file);
axWindowsMediaPlayerMusic.currentPlaylist.appendItem(media);
}
}
}

Во втором - синхронизируем плейлист с ListBox-ом, чтобы он отображался там:

private void axWindowsMediaPlayerMusic_PlaylistChange(object sender, AxWMPLib._WMPOCXEvents_PlaylistChangeEvent e)
{
listBoxSongs.BeginUpdate();
listBoxSongs.Items.Clear();
var playlist = axWindowsMediaPlayerMusic.currentPlaylist;
for (int i = 0; i < playlist.count; i++) listBoxSongs.Items.Add(playlist.Item[i].name);
listBoxSongs.EndUpdate();
}

Ещё можно сделать такой обработчик события DoubleClick у ListBox-а, чтобы можно было запускать воспроизведение двойным кликом в списке:

private void listBoxSongs_DoubleClick(object sender, EventArgs e)
{
Point pt = listBoxSongs.PointToClient(Cursor.Position);
int i = listBoxSongs.IndexFromPoint(pt.X, pt.Y);
if (i >= 0) {
IWMPMedia media = axWindowsMediaPlayerMusic.currentPlaylist.Item[i];
axWindowsMediaPlayerMusic.Ctlcontrols.playItem(media);
}
}

Для остального уже есть кнопки на самом плеере.
Александр Пономарев Вот мне казалось что я тоже видел play листы у WMP но сходу что-то не нашел.