public Form_ЗадатьЗначениеСвойства(PropertyInfo ИнформацияОСвойстве, Таблица ИнфТаблица) { InitializeComponent(); this.ИнфТаблица = ИнфТаблица; this.ИнформацияОСвойстве = ИнформацияОСвойстве; this.textBox_Значение.Text = Помощник.СвойствоКакСтрока(this.ИнформацияОСвойстве, this.ИнфТаблица); }
public ФормаТаблицы(Таблица <ТипЗаписи> Таблица, string ЗаголовокФормы = null, ВидОтображениеФормы ОтображениеФормы = ВидОтображениеФормы.Показ) { InitializeComponent(); this.Таблица = Таблица; this.ЗаголовокФормы = ЗаголовокФормы; this.ОтображениеФормы = ОтображениеФормы; // установка для выбора нескольких вариантов if (this.ОтображениеФормы == ВидОтображениеФормы.ВыборНескольких) { this.listView1.CheckBoxes = true; } var ОтображаемыеСвойства = Помощник.ПолучитьОтображаемыеСвойства <ТипЗаписи>(); // установка сортировщика this.lvwColumnSorter = new СортировщикКолонок <ТипЗаписи>(ОтображаемыеСвойства); this.listView1.ListViewItemSorter = this.lvwColumnSorter; // привязка событий к таблице this.Таблица.ДобавленаЗапись += new Action <ТипЗаписи, bool>(Таблица_ДобавленаЗапись); this.Таблица.УдаленаЗапись += new Action <ТипЗаписи>(Таблица_УдаленаЗапись); this.Таблица.ОбновлёнСтатус += new Action(Таблица_ОбновлёнСтатус); this.Таблица.Обновлено += new Action(Таблица_Обновлено); this.Таблица.ОбновленаЗапись += new Action <ТипЗаписи>(Таблица_ОбновленаЗапись); this.Таблица.азрешеноВизуальноеОбновление += new Action <bool>(Таблица_РазрешеноВизуальноеОбновление); this.Таблица.ПоказанаЗапись += new Action <ТипЗаписи, bool, bool>(Таблица_ПоказанаЗапись); // адаптируем колонки foreach (var Свойство in ОтображаемыеСвойства) { string НазваниеКолонки = ПолучитьНазваниеКолонки(Свойство); this.listView1.Columns.Add(НазваниеКолонки).Tag = Свойство; if (this.Таблица.Поиск) { var ПунктМеню = this.поискToolStripMenuItem.DropDownItems.Add(НазваниеКолонки); ПунктМеню.Tag = Свойство; ПунктМеню.Click += new EventHandler(this.ПунктМенюПоиска_Click); } } this.listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); // адаптируем статус foreach (var СвойствоСтатус in this.Таблица.GetType().GetProperties() .ToDictionary(x => x, y => Helper.Attr.BaseMethods.GetOne <СтатусAttribute>(y)) .Where(x => x.Value != null)) { var Надпись = new ToolStripStatusLabel(); Надпись.Tag = new KeyValuePair <PropertyInfo, string>(СвойствоСтатус.Key, string.IsNullOrWhiteSpace(СвойствоСтатус.Value.Подпись) ? СвойствоСтатус.Key.Name : СвойствоСтатус.Value.Подпись); // ссылка на изменение //if (СвойствоСтатус.Key.CanRead && СвойствоСтатус.Key.CanWrite) if (СвойствоСтатус.Value.Изменяемое) { Надпись.IsLink = true; Надпись.Click += new EventHandler(this.Надпись_Click); } this.statusStrip1.Items.Add(Надпись); } if (this.statusStrip1.Items.Count > 0) { this.ОбновитьСтатусы(); } else { // прячем статус this.statusStrip1.Visible = false; this.listView1.Height += this.statusStrip1.Height; } // адаптируем меню bool ПунктКонтекстногоМенюПоУмолчаниюУстановлен = false; bool ПунктКонтекстногоМенюПоУмолчаниюУстановлен2 = false; // -меняем меню, если таблица показана для выбора ToolStripMenuItem ЭлементВерхнегоМеню; switch (this.ОтображениеФормы) { case ВидОтображениеФормы.Выбор: // Выбрать ЭлементВерхнегоМеню = new ToolStripMenuItem("Выбрать"); ЭлементВерхнегоМеню.Font = new System.Drawing.Font(ЭлементВерхнегоМеню.Font, FontStyle.Bold); ЭлементВерхнегоМеню.Click += new EventHandler(ЭлементВерхнегоМеню_Click); this.menuStrip1.Items.Insert(this.ИндексВставки++, ЭлементВерхнегоМеню); break; case ВидОтображениеФормы.ВыборНескольких: // Выбрать ЭлементВерхнегоМеню = new ToolStripMenuItem("Выбрать"); ЭлементВерхнегоМеню.Click += new EventHandler(ЭлементВерхнегоМеню_Click); this.menuStrip1.Items.Insert(this.ИндексВставки++, ЭлементВерхнегоМеню); var ЭлементКонтекстногогоМеню = new ToolStripMenuItem("Выбрать"); ЭлементКонтекстногогоМеню.Click += new EventHandler(ЭлементВерхнегоМеню_Click); this.contextMenuStrip1.Items.Add(ЭлементКонтекстногогоМеню); // отметить все ЭлементВерхнегоМеню = new ToolStripMenuItem("Отметить все"); ЭлементВерхнегоМеню.Click += new EventHandler(ОтметитьВсе_Click); this.menuStrip1.Items.Insert(this.ИндексВставки++, ЭлементВерхнегоМеню); ЭлементКонтекстногогоМеню = new ToolStripMenuItem(ЭлементВерхнегоМеню.Text); ЭлементКонтекстногогоМеню.Click += new EventHandler(ОтметитьВсе_Click); this.contextMenuStrip1.Items.Add(ЭлементКонтекстногогоМеню); // снять все отметки ЭлементВерхнегоМеню = new ToolStripMenuItem("Снять все отметки"); ЭлементВерхнегоМеню.Click += new EventHandler(СнятьВсеОтметки_Click); this.menuStrip1.Items.Insert(this.ИндексВставки++, ЭлементВерхнегоМеню); ЭлементКонтекстногогоМеню = new ToolStripMenuItem(ЭлементВерхнегоМеню.Text); ЭлементКонтекстногогоМеню.Click += new EventHandler(СнятьВсеОтметки_Click); this.contextMenuStrip1.Items.Add(ЭлементКонтекстногогоМеню); // Инвертировать отметки ЭлементВерхнегоМеню = new ToolStripMenuItem("Инвертировать отметки"); ЭлементВерхнегоМеню.Click += new EventHandler(ИнвертироватьОтметки_Click); this.menuStrip1.Items.Insert(this.ИндексВставки++, ЭлементВерхнегоМеню); ЭлементКонтекстногогоМеню = new ToolStripMenuItem(ЭлементВерхнегоМеню.Text); ЭлементКонтекстногогоМеню.Click += new EventHandler(ИнвертироватьОтметки_Click); this.contextMenuStrip1.Items.Add(ЭлементКонтекстногогоМеню); break; default: foreach (var МетодФункция in this.Таблица.GetType().GetMethods().ToDictionary(x => x, y => Helper.Attr.BaseMethods.GetOne <ФункцияAttribute>(y)).Where(x => x.Value != null)) { string НазваниеСтатуса = !string.IsNullOrWhiteSpace(МетодФункция.Value.Подпись) ? МетодФункция.Value.Подпись : МетодФункция.Key.Name; //разбиваем на подменю var Подменю = НазваниеСтатуса.Split('/'); if (МетодФункция.Value.ВерхнееМеню) { // ищем/создаём подменю var КоллекцияПоискаПодменю = this.menuStrip1.Items; for (int i = 0; i < Подменю.Count() - 1; i++) { var НайденоеПодменю = КоллекцияПоискаПодменю .Cast <ToolStripItem>() .Where(x => x.GetType() == typeof(ToolStripMenuItem)) .Cast <ToolStripMenuItem>() .FirstOrDefault(x => x.Text == Подменю[i]); if (НайденоеПодменю == null) { НайденоеПодменю = new ToolStripMenuItem(Подменю[i]); if (i == 0) { КоллекцияПоискаПодменю.Insert(this.ИндексВставки++, НайденоеПодменю); } else { КоллекцияПоискаПодменю.Add(НайденоеПодменю); } } КоллекцияПоискаПодменю = НайденоеПодменю.DropDownItems; } НазваниеСтатуса = Подменю.Last(); // создаём пункт меню var ЭлементГлавногоМеню = new ToolStripMenuItem(НазваниеСтатуса); ЭлементГлавногоМеню.Tag = МетодФункция.Key; if (!this.Modal && !ПунктКонтекстногоМенюПоУмолчаниюУстановлен2 && МетодФункция.Value.ПоУмолчанию) { ЭлементГлавногоМеню.Font = new Font(ЭлементГлавногоМеню.Font, FontStyle.Bold); ПунктКонтекстногоМенюПоУмолчаниюУстановлен2 = true; } ЭлементГлавногоМеню.Click += new EventHandler(ЭлементГлавногоМеню_Click); if (КоллекцияПоискаПодменю == this.menuStrip1.Items) { КоллекцияПоискаПодменю.Insert(this.ИндексВставки++, ЭлементГлавногоМеню); } else { КоллекцияПоискаПодменю.Add(ЭлементГлавногоМеню); } } if (МетодФункция.Value.КонтекстноеМеню) { // ищем/создаём подменю var КоллекцияПоискаПодменю = this.contextMenuStrip1.Items; for (int i = 0; i < Подменю.Count() - 1; i++) { var НайденоеПодменю = КоллекцияПоискаПодменю .Cast <ToolStripItem>() .Where(x => x.GetType() == typeof(ToolStripMenuItem)) .Cast <ToolStripMenuItem>() .FirstOrDefault(x => x.Text == Подменю[i]); if (НайденоеПодменю == null) { НайденоеПодменю = new ToolStripMenuItem(Подменю[i]); КоллекцияПоискаПодменю.Add(НайденоеПодменю); } КоллекцияПоискаПодменю = НайденоеПодменю.DropDownItems; } НазваниеСтатуса = Подменю.Last(); var ЭлементКонтекстногоМеню = new ToolStripMenuItem(НазваниеСтатуса); ЭлементКонтекстногоМеню.Tag = МетодФункция.Key; if (!this.Modal && !ПунктКонтекстногоМенюПоУмолчаниюУстановлен && МетодФункция.Value.ПоУмолчанию) { ЭлементКонтекстногоМеню.Font = new Font(ЭлементКонтекстногоМеню.Font, FontStyle.Bold); ПунктКонтекстногоМенюПоУмолчаниюУстановлен = true; } else if (МетодФункция.Value.КлавишиВызова != Keys.None) { ЭлементКонтекстногоМеню.ShortcutKeys = МетодФункция.Value.КлавишиВызова; ЭлементКонтекстногоМеню.ShowShortcutKeys = true; } ЭлементКонтекстногоМеню.Click += new EventHandler(ЭлементГлавногоМеню_Click); КоллекцияПоискаПодменю.Add(ЭлементКонтекстногоМеню); } // скрытая функция if (!МетодФункция.Value.ВерхнееМеню && !МетодФункция.Value.КонтекстноеМеню) { this.СкрытыеФункции.Add(МетодФункция.Value.КлавишиВызова, МетодФункция.Key); } } break; } // даём возможность информационной таблице изменить меню this.Таблица.ФормированиеМенюЗавершено(this.menuStrip1, this.contextMenuStrip1); // если верхнее меню пустое (), то скрываем его if (this.menuStrip1.Items.Count == 2 && !this.Таблица.Поиск) { this.menuStrip1.Visible = false; var y = this.listView1.Location.Y; this.listView1.Location = new Point(this.listView1.Location.X, 0); this.listView1.Height += y; } // добавляем в меню "поиск", если нужно if (this.Таблица.Поиск) { ToolStripItem КнопкаПоиска = null; // ищем колонку поиска по умолчанию // (потом зделать поиск колонки поиска при адаптации колонок) foreach (var Свойство in typeof(ТипЗаписи).GetProperties()) { var АтрибутКолонкиВТаблице = Helper.Attr.BaseMethods.GetOne <КолонкаAttribute>(Свойство); if (АтрибутКолонкиВТаблице != null && АтрибутКолонкиВТаблице.ПоискПоУмолчанию) { var КнопкиМенюПоисков = this.поискToolStripMenuItem.DropDownItems.Cast <ToolStripItem>().Where(x => Свойство.Equals(x.Tag)).Take(1); if (КнопкиМенюПоисков.Count() > 0) { КнопкаПоиска = КнопкиМенюПоисков.First(); break; } } } if (КнопкаПоиска == null) { КнопкаПоиска = this.поискToolStripMenuItem.DropDownItems[0]; } // вызываем клик по первому полю поиска КнопкаПоиска.PerformClick(); } else { this.поискToolStripMenuItem.Visible = false; this.toolStripTextBox_Поиск.Visible = false; } }