private void LinkLabelAddNewLinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { panelMain.Controls.Remove(panelAdd); // Добавляем контрол - неисправность FlightSmsEventControl d = new FlightSmsEventControl(new Event { Parent = Flight, AircraftId = Flight.AircraftId }) { EventDate = _eventDate, Extended = true, EnableExtendedControl = false }; d.Deleted += ConditionControlDeleted; panelMain.Controls.Add(d); panelMain.Controls.Add(panelAdd); }
/* * Реализация */ #region private void BuildControls() /// <summary> /// Строит нужные контролы /// </summary> private void BuildControls() { #region Освобождение панелей от контролов foreach (Control control in panelMain.Controls) { if (control is FlightSmsEventControl) { ((FlightSmsEventControl)control).Deleted -= ConditionControlDeleted; control.Dispose(); } else if (control != panelAdd) { control.Dispose(); } } panelMain.Controls.Clear(); #endregion #region Добавление контролов IRecordCollection <Event> events = Flight != null ? Flight.Events : new BaseRecordCollection <Event>(); for (int i = 0; i < events.Count; i++) { // Добавляем контрол - неисправность FlightSmsEventControl d = new FlightSmsEventControl { EnableExtendedControl = events.Count >= 2, Extended = i <= 1 }; d.Deleted += ConditionControlDeleted; if (Flight != null && i < events.Count) { d.Event = events[i]; } panelMain.Controls.Add(d); } panelMain.Controls.Add(panelAdd); #endregion }
/* * Перегружаемые методы */ #region public override void ApplyChanges() /// <summary> /// Применить к объекту сделанные изменения на контроле. /// Если не все данные удовлетворяют формату ввода (например при вводе чисел), свойства объекта не изменяются, возвращается false /// Вызов base.ApplyChanges() обязателен /// </summary> /// <returns></returns> public override void ApplyChanges() { // Применяем сделанные изменения объектам for (int i = 0; i < panelMain.Controls.Count; i++) { FlightSmsEventControl d = panelMain.Controls[i] as FlightSmsEventControl; if (d != null && d.Event != null) { d.ApplyChanges(); if (d.Event.ItemId <= 0) { //Новый Discrepancy, добавляем его в AircraftFlight Flight.Events.Add(d.Event); } } } // base.ApplyChanges(); }
private void ConditionControlDeleted(object sender, EventArgs e) { FlightSmsEventControl control = (FlightSmsEventControl)sender; Event cond = control.Event; if (cond.ItemId > 0 && MessageBox.Show("Do you really want to delete Event?", "Deleting confirmation", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { //если информация о состоянии сохранена в БД //и получен положительный ответ на ее удаление try { GlobalObjects.NewKeeper.Delete(cond); Flight.Events.Remove(cond); } catch (Exception ex) { Program.Provider.Logger.Log("Error while removing data", ex); } if (panelMain.Controls.Contains(control)) { panelMain.Controls.Remove(control); } control.Deleted -= ConditionControlDeleted; control.Dispose(); } else if (cond.ItemId <= 0) { if (panelMain.Controls.Contains(control)) { panelMain.Controls.Remove(control); } control.Deleted -= ConditionControlDeleted; control.Dispose(); } }