using System; using System.Drawing; using System.IO; using System.Windows.Forms; namespace DesktopTools.BaseControls { /// /// Контрол, предоставляющий работу с изображением /// public partial class BaseControlImage : AbstractBaseControl { /// /// Конструктор /// /// /// /// /// /// public BaseControlImage(string propertyName, bool mustFilling, bool readOnly, int? width, int? height) : base(propertyName, mustFilling, readOnly) { InitializeComponent(); if (width.HasValue) { Width = width.Value; } if (height.HasValue) { Height = height.Value; } buttonLoad.Click += (object sender, EventArgs e) => { var dialog = new OpenFileDialog(); if (dialog.ShowDialog() == DialogResult.OK) { try { pictureBox.ClientSize = new Size(150, 150); pictureBox.Image = new Bitmap(dialog.FileName); CallOnValueChangeEvent(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка при загрузке файла", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }; panelControl.Controls.Add(pictureBox); } protected override void SetDefaultValue() => _originalValue = null; protected override void SetValueToControl(object value) { if (value != null) { using MemoryStream mStream = new(value as byte[]); pictureBox.Image = Image.FromStream(mStream); } else if (!_mustFilling) { pictureBox.Image = null; } } public override void DropValue() { if (_originalValue != null) { using MemoryStream mStream = new(_originalValue as byte[]); pictureBox.Image = Image.FromStream(mStream); } else if (!_mustFilling) { pictureBox.Image = null; } } public override bool CheckValue() { if (_mustFilling && pictureBox.Image == null) { BackColor = Color.OrangeRed; return false; } return true; } protected override object GetValueFromControl() { if (_mustFilling && pictureBox.Image == null) { throw new ArgumentNullException($"Поле свойства '{labelTitle.Text}' должно быть заполнено"); } var converter = new ImageConverter(); return (byte[])converter.ConvertTo(pictureBox.Image, typeof(byte[])); } } }