Добавляю аудио файлы в ListBox
нажатием на Button
. Далее срабатывает OpenFileDialog
(код ниже). После использую добавленные файлы в ListBox
для воспроизведения (код ниже). Нажимаю на button_play
и идет воспроизведение. Вопрос такой. Что изменить, чтобы воспроизведение не выбирало строку по SelectedIndex
, а по просто выделенной в данный момент курсором строке.
private void button_add_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
label_load.Text = list_catalog.Items.Count.ToString();
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
foreach (String file in openFileDialog1.FileNames)
{
if (list_catalog.Items.Contains(Vars.GetFileName(file)))
{
}
else
{
Vars.Files.Add(file);
list_catalog.Items.Add(Vars.GetFileName(file));
hello.Visible = false;
}
}
}
private void button_play_Click(object sender, EventArgs e)
{
string current = Vars.Files[list_catalog.SelectedIndex];
Vars.CurrentTrackNumber = list_catalog.SelectedIndex;
BassLike.Play(current, BassLike.Volume);
label_time1.Text = TimeSpan.FromSeconds(BassLike.GetPosOfStream(BassLike.Stream)).ToString();
label_time2.Text = TimeSpan.FromSeconds(BassLike.GetTimeOfStream(BassLike.Stream)).ToString();
xrewind.Maximum = BassLike.GetTimeOfStream(BassLike.Stream);
xrewind.Value = BassLike.GetPosOfStream(BassLike.Stream);
timer1.Enabled = true;
}
public static class Vars
{
public static Form1 Link;
public static string AppPath = AppDomain.CurrentDomain.BaseDirectory;
public static List<string> Files = new List<string>();
public static int CurrentTrackNumber;
public static string GetFileName(string file)
{
string[] tmp = file.Split('\\');
return tmp[tmp.Length - 1];
}
public static void DeleteFile(int num)
{
try
{
Files.RemoveAt(num);
}
catch
{
}
}
}
После того, как Вы делаете list_catalog.Sorted = true
, у Вас сортируется list_catalog
, а Vars.Files
остается таким же. Поэтому и выбирается не то, что нужно. Вы можете по имени выбранного в listBox1
элемента найти элемент с этим же именем в Vars.Files
:
private void button_play_Click(object sender, EventArgs e)
{
// Изменена одна строка
string current = Vars.Files.Where(x => x == (string)list_catalog.SelectedItem).Single();
Vars.CurrentTrackNumber = list_catalog.SelectedIndex;
BassLike.Play(current, BassLike.Volume);
label_time1.Text = TimeSpan.FromSeconds(BassLike.GetPosOfStream(BassLike.Stream)).ToString();
label_time2.Text = TimeSpan.FromSeconds(BassLike.GetTimeOfStream(BassLike.Stream)).ToString();
xrewind.Maximum = BassLike.GetTimeOfStream(BassLike.Stream);
xrewind.Value = BassLike.GetPosOfStream(BassLike.Stream);
timer1.Enabled = true;
}
Update
Vars.Files
содержит полные имена файлов, а list_catalog
- имена без пути. И пытаясь найти значения из list_catalog
, равные значениям из Vars.Files
, естественно, получили InvalidOperationException
. Тогда нужно смотреть в какой из строк Vars.Files
содержится строка из list_catalog
:
string current = Vars.Files.Where(x => x.Contains((string)list_catalog.SelectedItem)).Single();
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть два класса Human и StudentПусть, Student наследуется от Human
Есть задача - программа проверки правописанияВ качестве словаря должен быть использован файл типа
Установил phpmyadmin, добавил запись в таблицу, а удалить или редактировать запись кнопки нет, непонимаю в чем проблема, ос manjaro - linux