Расположения: AMH/Form2.cs , AMH/BuyMenu/Items.cs
Расположение картинок для предметов в lisView AMH/BuyMenu/ItemsImage/
Исправить: Теперь не работает поиск по listView2 а также не работает добавление предметов из listView2 в listView1 , также думаю что поиск в listView1 тоже не работает. Когда будешь переделывать учти что в listView1 поиск должен осуществляться только по добавленным предметам из listView2, а также нужно избежать того случая если добавили предмет из listView2 в listView1 предмет то его снова можно найти через поиск в listView2


###Form2.cs:
using System;
using System.Windows.Forms;
using System.IO;
using System.Drawing;
using System.Globalization;
using System.Collections.Generic;
using AMH.BuyMenu.ItemsImage;
using static AMH.BuyMenu.ItemsImage.Item;
using System.Security.Policy;

namespace AMH
{
    public partial class Form2 : Form
    {
        private static readonly HashSet<string> AddedItems = new HashSet<string>();

        public Form2()
        {
            InitializeComponent();
            this.FormClosed += (sender, e) => Application.Exit();

            string imagesPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "BuyMenu", "ItemsImage");
            LoadImages(imagesPath);
            listView1.SmallImageList = imageList1;
            listView2.SmallImageList = imageList1;
            Items.PopulateListView(listView2, imageList1);
        }

        private void LoadImages(string folderPath)
        {
            DirectoryInfo dirInfo = new DirectoryInfo(folderPath);
            if (!dirInfo.Exists)
            {
                MessageBox.Show("Directory not found: " + folderPath, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            foreach (FileInfo file in dirInfo.GetFiles("*.png"))
            {
                try
                {
                    string key = Path.GetFileNameWithoutExtension(file.Name);
                    Image image = Image.FromFile(file.FullName);
                    imageList1.Images.Add(key, image);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error loading image: " + ex.Message);
                }
            }
        }

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

        private void TransferSelectedItems()
        {
            List<ListViewItem> itemsToAdd = new List<ListViewItem>();

            foreach (ListViewItem selectedItem in listView2.SelectedItems)
            {
                string imageKey = selectedItem.ImageKey;
                if (!AddedItems.Contains(imageKey)) // Проверяем, добавлен ли элемент ранее
                {
                    ListViewItem newItem = (ListViewItem)selectedItem.Clone();
                    newItem.SubItems.Clear();
                    newItem.SubItems.Add(imageKey); // ImageKey
                    newItem.SubItems.Add(selectedItem.SubItems[1].Text); // Название
                    newItem.SubItems.Add("1"); // Количество
                    AddedItems.Add(imageKey); // Добавляем в список добавленных
                    itemsToAdd.Add(newItem);
                }
            }

            listView1.Items.AddRange(itemsToAdd.ToArray());
            listView1.Refresh(); // Обновляем listView1 для отображения изменений

            UpdateListView2(textBoxSearchListView2.Text); // Обновляем listView2, чтобы исключить добавленные элементы из результатов поиска
        }

        private void removeItem_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count > 0)
            {
                foreach (ListViewItem selectedItem in listView1.SelectedItems)
                {
                    AddedItems.Remove(selectedItem.ImageKey);
                    listView1.Items.Remove(selectedItem);
                }
            }
        }

        private void UpdateListView1(string searchText)
        {
            CultureInfo cultureInfo = CultureInfo.CurrentCulture; // или Thread.CurrentThread.CurrentCulture для WinForms
            var filteredItems = new List<ListViewItem>();

            foreach (ListViewItem lvi in listView1.Items)
            {
                string itemName = lvi.SubItems[1].Text; // Предполагается, что название предмета хранится во втором subitem (index 1)
                if (string.IsNullOrWhiteSpace(searchText) || itemName.IndexOf(searchText, StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    filteredItems.Add(lvi);
                }
            }

            listView1.BeginUpdate();
            listView1.Items.Clear();
            listView1.Items.AddRange(filteredItems.ToArray());
            listView1.EndUpdate();
        }


        private void textBoxSearchListView1_TextChanged(object sender, EventArgs e)
        {
            UpdateListView1(textBoxSearchListView1.Text);
        }

        private void textBoxSearchListView2_TextChanged(object sender, EventArgs e)
        {
            UpdateListView2(textBoxSearchListView2.Text);
        }

        private void UpdateListView2(string searchText)
        {
            CultureInfo currentCulture = CultureInfo.CurrentCulture; // или Thread.CurrentThread.CurrentCulture для WinForms
            listView2.BeginUpdate();
            listView2.Items.Clear();

            foreach (var item in Item.Items.ItemsList)
            {
                string itemName = item.GetNameByCulture(currentCulture);
                if (!AddedItems.Contains(item.ImagePath) &&
                    (string.IsNullOrWhiteSpace(searchText) || itemName.IndexOf(searchText, StringComparison.OrdinalIgnoreCase) >= 0))
                {
                    ListViewItem lvi = item.ToListViewItem(currentCulture);
                    listView2.Items.Add(lvi);
                }
            }

            listView2.EndUpdate();
        }

        private void textBoxSearchListView2_TextChanged_1(object sender, EventArgs e)
        {

        }

        private void textBoxSearchListView1_TextChanged_1(object sender, EventArgs e)
        {

        }
    }
}

###Items.cs
using System.Collections.Generic;
using System.Globalization;
using System.Security.Policy;
using System.Windows.Forms;

namespace AMH.BuyMenu.ItemsImage
{
    public class Item
    {
        public string Name { get; set; }
        public string RuName { get; set; }
        public string Category { get; set; }
        public int Level { get; set; }
        public string Enchantment { get; set; }
        public string Quality { get; set; }
        public string ImagePath { get; set; }

        public Item(string name, string ruName, string category, int level, string imagePath,
                    string enchantment = "None", string quality = "Normal")
        {
            Name = name;
            RuName = ruName;
            Category = category;
            Level = level;
            ImagePath = imagePath;
            Enchantment = enchantment;
            Quality = quality;
        }

        public string GetNameByCulture(CultureInfo ci) => ci.Name == "ru-RU" ? RuName : Name;

        public ListViewItem ToListViewItem(CultureInfo ci) => new ListViewItem
        {
            ImageKey = ImagePath,
            SubItems = {
                GetNameByCulture(ci),
                Category,
                Level.ToString(),
                Enchantment, // Adding the Enchantment as a sub-item
                Quality // Adding the Quality as a sub-item
            }
        };

        public static class Items
        {
            public static List<Item> ItemsList { get; } = new List<Item>
            {
                // Initializing the list with items, potentially retrieved from a database, file, or defined in code
                new Item("Adept’s Arcane Staff", "Посох Адепта", "Staff", 4, "T4_MAIN_ARCANESTAFF"),
                new Item("Journeyman’s Arcane Staff", "Посох Подмастерья", "Staff", 3, "T3_MAIN_ARCANESTAFF")
            };

            public static void PopulateListView(ListView listView, ImageList imageList)
            {
                CultureInfo currentCulture = CultureInfo.CurrentCulture;
                listView.BeginUpdate();
                listView.Items.Clear();
                foreach (var item in ItemsList)
                {
                    listView.Items.Add(item.ToListViewItem(currentCulture));
                }
                listView.SmallImageList = imageList;
                listView.EndUpdate();
            }
        }
    }
}