public string[] files, paths;
public void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
files = openFileDialog1.SafeFileNames; // Save only the names
paths = openFileDialog1.FileNames; // Save the full paths
for (int i = 0; i < files.Length; i++)
{
listBox1.Items.Add(files[i]); // Add songs to the listbox
}
}
}
здесь listbox1 (playlist) заполняется открытым диалоговым окном, а listbox1 показывает и хорошо работает с моим плеером. Мне нужно переместить функцию и скопировать в listbox2 (избранное) с моими строковыми значениями, поступающими из listbox1 (плейлист)
public string[] files, paths;
также мне нужна функция для перемещения и копирования из новых значений listbox2 (избранное) в плейлист с моими строковыми файлами и путями
это один mp3-плеер, работающий с библиотекой WMPLib 7 mediaplayer. Мне нужны функции, чтобы изменить этот два списка плейлистов с избранными и плейлистами... большое вам спасибо
public void MoveListBoxItems(ListBox files, ListBox files2)
{
ListBox.SelectedObjectCollection sourceItems = files.SelectedItems;
foreach (var Items in sourceItems)
{
files2.Items.Add(Items);
}
while (files.SelectedItems.Count > 0)
{
files.Items.Remove(files.SelectedItems[0]);
}
}
здесь нажмите кнопку
MoveListBoxItems(listBox1, listBox2);
эта функция, которую я использую, но не работаю, когда я обмениваюсь списком вместе первое значение listbox1, работающее средние игры на игроке
здесь игрок
private void listBox2_MouseDoubleClick(object sender, MouseEventArgs e)
{
axWindowsMediaPlayer1.URL = paths[listBox2.SelectedIndex];
}
Честно говоря, трудно понять вашу проблему из вашего описания, но звучит так, как будто у вас есть списки, содержащие ссылки на элементы, данные которых хранятся в двух отдельных массивах (имя файла и путь к файлу); вы помещаете записи из одного из двух массивов в список (имя файла) и путаетесь о связи между выбранными элементами и соответствующими индексами во втором массиве.
Если вам просто нужно создать массивы, соответствующие выбранным индексам в listBox1
, вы можете сделать это:
var selectedFiles = listBox1.SelectedIndices.Cast<int>().Select(index => files[index]).ToArray();
var selectedPaths = listBox1.SelectedIndices.Cast<int>().Select(index => paths[index]).ToArray();
Однако лучшим решением было бы заменить пару массивов массивом классов, представляющих все необходимые данные:
public class FileAndPath : IEquatable<FileAndPath>
{
public FileAndPath(string file, string path)
{
this.File = file;
this.Path = path;
}
public FileAndPath(string path)
{
File = System.IO.Path.GetFileName(path);
Path = path;
}
public string File { get; set; }
public string Path { get; set; }
public override string ToString()
{
return File == null ? string.Empty : File;
}
public override bool Equals(object obj)
{
if (object.ReferenceEquals(this, obj))
return true;
if (obj == null)
return false;
if (obj.GetType() != GetType())
return false;
var other = (FileAndPath)obj;
return File == other.File && Path == other.Path;
}
public override int GetHashCode()
{
int code = 0;
if (File != null)
code ^= File.GetHashCode();
if (Path != null)
code ^= Path.GetHashCode();
return code;
}
#region IEquatable<FileAndPath> Members
public bool Equals(FileAndPath other)
{
return Equals((object)other);
}
#endregion
public static bool operator ==(FileAndPath first, FileAndPath second)
{
if (object.ReferenceEquals(first, second))
return true;
else if (object.ReferenceEquals(first, null))
return false;
return first.Equals(second);
}
public static bool operator !=(FileAndPath first, FileAndPath second)
{
return !(first == second);
}
}
Переопределяя ToString()
, вы гарантируете, что имя файла отображается в списке. Сохраняя имя и путь вместе в классе, вы гарантируете, что вы никогда не потеряете связь, поскольку элементы перемещаются между списками:
Ваши MoveListBoxItems
становятся:
public static void MoveListBoxItems(ListBox files1, ListBox files2)
{
var selections = files1.SelectedItems.Cast<FileAndPath>().ToList();
foreach (var selection in selections)
{
files2.Items.Add(selection);
files1.Items.Remove(selection);
}
}
listBox2_MouseDoubleClick
становится:
private void listBox2_MouseDoubleClick(object sender, MouseEventArgs e)
{
axWindowsMediaPlayer1.URL = ((FileAndPath)listBox2.SelectedItem).Path;
}
И button1_Click
:
public void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
var files = openFileDialog1.SafeFileNames; // local variable only
var paths = openFileDialog1.FileNames; // local variable only
for (int i = 0; i < files.Length; i++)
{
listBox1.Items.Add(new FileAndPath(files[i], paths[i])); // Add songs to the listbox
}
}
}
string
неизменна, поэтому вы можете использовать расширениеfiles.ToArray()
Linq.files.ToArray()
для клонирования самого массива.public string[] files, paths;
listbox1public string[] files, paths;