} // MainForm // Добавление записи в ListView по команде меню (инструментальной кнопке) private void mniAdd_Click(object sender, EventArgs e) { statusBar.Text = "Добавление записи..."; // Открепляем текущее фото от пикчер-бокса pbxShip.Load((folderImages + Ship.fileNoPhoto)); if (editForm == null) { editForm = new Forms.EditForm(); } editForm.Text = "Добавление корабля в коллекцию"; // при добавлении все поля ввода д.б. пустыми // в том числе и внутренний пикчер-бокс editForm.Clear(); if (editForm.ShowDialog() != DialogResult.OK) { return; } // Прочитать данные из формы Ship ship = editForm.Data; // перед добавлением - копировать файл в папку Images проекта, // скорректировать имя файла - привести к формату Images\ИмяФайла if (!string.IsNullOrEmpty(ship.FilePhoto)) { // новое имя - файл приемник string temp = folderImages + ship.Name + Path.GetExtension(ship.FilePhoto); if (!File.Exists(temp)) { addedImages.Add(temp); // добавляем имя файла в список File.Copy(ship.FilePhoto, temp); // копирование из старого места в папку Images проекта } // if ship.FilePhoto = temp; // запомнить новое имя файла } // когда пользователь не выбирает фотографию новому кораблю else { ship.FilePhoto = (folderImages + Ship.fileNoPhoto); } ships.Add(ship); // и, наконец-таки, добавляем корабль // Добавить элемент в ListView" // a) создать элемент - первый столбец ListView ListViewItem item = new ListViewItem($"{ship.Id}"); // б) создать подэлементы - остальные столбцы item.SubItems.Add(ship.Name); item.SubItems.Add($"{ship.Displacement}"); item.SubItems.Add($"{ship.Speed}"); item.SubItems.Add($"{ship.CruisingRange}"); // в) собственно добавление в ListView lvShips.Items.Add(item); statusBar.Text = "Корабль добавлен в коллекцию"; // После добавления записи делать активной последнюю запись, которая добавлена lvShips.Items[lvShips.Items.Count - 1].Selected = true; isAddOrEdit = true; mniSave.Enabled = true; mniSaveAs.Enabled = true; } // mniAdd_Click
} // mniRemove_Click // Обработка команды - редактирование корабля в коллекции // (обработка меню и кнопки панели инструментов) // TODO: И всё таки по результатам тестирования, если провести запись // и тут же попробовать изменить ей фото, то замена фото не проходит!! // Не могу понять почему (?) private void mniEdit_Click(object sender, EventArgs e) { statusBar.Text = "Редактирование..."; // Проверка, есть или нет выбранного элемента в списке ListView - // сообщить об ошибке и выйти if (lvShips.SelectedIndices.Count == 0) { MessageBox.Show("Корабль для редактирования не выбран", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // if // Получить индекс выбранного корабля int index = lvShips.SelectedIndices[0]; // Создание формы, при необходимости, настройка формы // а) название, соответствующее операции формы - редактированию // б) передать данные в форму if (editForm == null) { editForm = new Forms.EditForm(); } editForm.Text = "Изменение (редактирование) данных корабля в коллекции"; editForm.Data = ships[index]; if (editForm.ShowDialog() != DialogResult.OK) { return; } // Прочитать данные из формы, записать их новые значения // в коллекцию кораблей, в ListView Ship ship = editForm.Data; editForm.Clear(); // Очистка полей, отсоединение от файла фотографии // !!! Идея работы с файлами фотографий // а) получаем имя файла-источника в форме редактирования // б) передаем в главную форму полное имя файла // в) в главной форме из имени файла, полученного из формы ввода (возможно, // это полное имя, возмозжно - имя в папке Images) делаем // имя из Images + толькоИмяФайле // г) проверяем, есть ли такой файл в папке Images // и если его нет - копируем и заменяем имя файла источника // именем файла-копии в папке Images // перед записью в коллекцию - копировать файл фото в папку Images проекта, если этого // файла еще нет в папке фотографий кораблей // скорректировать имя файла - привести к формату Images\ИмяФайла string temp = folderImages + ship.Name + Path.GetExtension(ship.FilePhoto); // новое имя - файл приемник if (!File.Exists(temp)) { addedImages.Add(temp); // добавляем имя файла в список File.Copy(ship.FilePhoto, temp); // копирование из старого места в папку Images проекта } // if ship.FilePhoto = temp; // запомнить новое имя файла ships[index] = ship; // копируются все поля, кроме идентификатора // Заменить поля элемента в ListView // a) получить элемент index из ListView ListViewItem item = lvShips.Items[index]; // б) записать новые значения столбцов item.SubItems[0].Text = $"{ship.Id}"; item.SubItems[1].Text = ship.Name; item.SubItems[2].Text = $"{ship.Displacement}"; item.SubItems[3].Text = $"{ship.Speed}"; item.SubItems[4].Text = $"{ship.CruisingRange}"; // в) собственно замена в ListView по индексу index lvShips.Items[index] = item; statusBar.Text = "Запись изменена"; // После изменения записи делать активной запись, которая была изменена lvShips.Items[index].Selected = true; isAddOrEdit = true; } // mniEdit_Click