c # строка плейлиста в избранное скопировать изменить

1
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];
    }
  • 0
    Не совсем уверен, что понимаю ваш вопрос. Вы показываете нам код, который работает - можете ли вы показать нам код, который не работает? Если вы просто хотите скопировать массив строк, то string неизменна, поэтому вы можете использовать расширение files.ToArray() Linq. files.ToArray() для клонирования самого массива.
  • 0
    здесь я редактирую свое сообщение, мне нужно что-то поменять различными значениями между listbox1 и 2, потому что когда я перемещаю одну песню, всегда воспроизводятся public string[] files, paths; listbox1 public string[] files, paths;
Показать ещё 1 комментарий
Теги:
string
listbox

1 ответ

0
Лучший ответ

Честно говоря, трудно понять вашу проблему из вашего описания, но звучит так, как будто у вас есть списки, содержащие ссылки на элементы, данные которых хранятся в двух отдельных массивах (имя файла и путь к файлу); вы помещаете записи из одного из двух массивов в список (имя файла) и путаетесь о связи между выбранными элементами и соответствующими индексами во втором массиве.

Если вам просто нужно создать массивы, соответствующие выбранным индексам в 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(), вы гарантируете, что имя файла отображается в списке. Сохраняя имя и путь вместе в классе, вы гарантируете, что вы никогда не потеряете связь, поскольку элементы перемещаются между списками:

Изображение 174551

Ваши 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
        }
    }
}
  • 1
    Большое спасибо, он работает отлично, как я хочу, с помощью этого кода я улучшаю другие функции. это так помочь мне в этом коде еще раз спасибо ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню