using DocumentFormat.OpenXml.Office2010.Excel; using Library_var_4_lab_1; using LibraryContracts.StorageContracts; using LibraryDatabase.Models; using LibraryDatabase.Storages; using LibraryDataModels.Dtos; using LibraryDataModels.Views; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls.Primitives; using System.Windows.Forms; using static LibraryUtils.ImageConverter.ImageConverter; namespace LibraryWinFormsApp { public partial class FormBook : Form { public int _id { get; set; } = -1; private string _cover { get; set; } = string.Empty; private BookView? _book = null; private IBookStorage _bookStorage; private IAuthorStorage _authorStorage; public FormBook(IBookStorage bookStorage, IAuthorStorage authorStorage) { InitializeComponent(); _bookStorage = bookStorage; _authorStorage = authorStorage; } private void FormBook_Load(object sender, EventArgs e) { LoadData(); } private void LoadData() { try { releaseDateField.Template = @"^([1-9]|[12][0-9]|3[01]) (января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря) [0-9]{4}$"; var authors = _authorStorage.GetFullList(); if (authors != null) { foreach (var author in authors) { authorField.Input(author.Name); } } if (_id != -1) { _book = _bookStorage.GetElement(new BookDto() { Id = _id, }); if (_book != null) { _cover = _book.BookCover; nameField.Text = _book.Name; releaseDateField.Date = _book.ReleaseDate; authorField.SelectedItem = _book.Author; try { pictureBox.Image = StringToImage(_cover); } catch { return; } } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void FormBook_FormClosing(object sender, FormClosingEventArgs e) { try { bool Changed = false; if (_book == null) { if (!string.IsNullOrEmpty(_cover)) Changed = true; if (!string.IsNullOrEmpty(nameField.Text)) Changed = true; if (!string.IsNullOrEmpty(releaseDateField.Text)) Changed = true; if (!string.IsNullOrEmpty(authorField.Text)) Changed = true; } else { if (_cover != _book.BookCover) Changed = true; if (nameField.Text != _book.Name) Changed = true; if (releaseDateField.Date != _book.ReleaseDate) Changed = true; if (authorField.SelectedItem != _book.Author) Changed = true; } if (Changed) { DialogResult dialogResult = MessageBox.Show("Изменения не были сохранены. Всё равно выйти?", "Внимание!", MessageBoxButtons.YesNo); if (dialogResult == DialogResult.No) { e.Cancel = true; } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void saveButton_Click(object sender, EventArgs e) { try { if (string.IsNullOrEmpty(_cover)) { throw new Exception("Выберите обложку"); } var book = new BookDto() { Name = nameField.Text, BookCover = _cover, Author = authorField.SelectedItem, ReleaseDate = releaseDateField.Date, }; if (_id != -1) { book.Id = _id; _book = _bookStorage.Update(book); } else { _book = _bookStorage.Insert(book); } _id = _book?.Id ?? -1; _cover = _book?.BookCover ?? string.Empty; Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void changeCoverButton_Click(object sender, EventArgs e) { var dialog = new OpenFileDialog(); dialog.Title = "Выберите изображение"; dialog.Filter = "Изображения|*.jpg;*.jpeg;*.png;*.bmp"; if (dialog.ShowDialog() == DialogResult.OK) { var image_new = new Bitmap(dialog.FileName); pictureBox.Image = image_new; _cover = ImageToString(image_new); } dialog.Dispose(); } } }