private void ConditionControlDeleted(object sender, EventArgs e) { DiscrepancyControlLight control = (DiscrepancyControlLight)sender; Discrepancy cond = control.Discrepancy; if (cond.ItemId > 0 && MessageBox.Show("Do you really want to delete Discrepancy?", "Deleting confirmation", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { //если информация о состоянии сохранена в БД //и получен положительный ответ на ее удаление try { GlobalObjects.NewKeeper.Delete(cond); } catch (Exception ex) { Program.Provider.Logger.Log("Error while removing data", ex); } if (panelDiscrepancies.Controls.Contains(control)) { panelDiscrepancies.Controls.Remove(control); } else if (panelMEL.Controls.Contains(control)) { panelMEL.Controls.Remove(control); } else if (panelOldMEL.Controls.Contains(control)) { panelOldMEL.Controls.Remove(control); } control.Deleted -= ConditionControlDeleted; control.Dispose(); } else if (cond.ItemId <= 0) { if (panelDiscrepancies.Controls.Contains(control)) { panelDiscrepancies.Controls.Remove(control); } else if (panelMEL.Controls.Contains(control)) { panelMEL.Controls.Remove(control); } else if (panelOldMEL.Controls.Contains(control)) { panelOldMEL.Controls.Remove(control); } control.Deleted -= ConditionControlDeleted; control.Dispose(); } if (panelDiscrepancies.Controls.OfType <DiscrepancyControlLight>().Count() < 4) { linkLabelAddNew.Enabled = true; } }
private void LinkLabelAddNewLinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { panelDiscrepancies.Controls.Remove(panelAdd); // Добавляем контрол - неисправность _discrepanciesCount++; var d = new DiscrepancyControlLight(new Discrepancy { ParentFlight = Flight }, Discrepancies); d.Index = _discrepanciesCount; d.Station = _station; d.RTSDate = _rtsDate; d.Extended = true; d.EnableExtendedControl = false; d.Deleted += ConditionControlDeleted; panelDiscrepancies.Controls.Add(d); panelDiscrepancies.Controls.Add(panelAdd); if (panelDiscrepancies.Controls.OfType <DiscrepancyControlLight>().Count() >= 4) { linkLabelAddNew.Enabled = false; } }
/* * Реализация */ #region private void BuildControls() /// <summary> /// Строит нужные контролы /// </summary> private void BuildControls() { #region// Освобождение панелей от контролов foreach (Control control in panelDiscrepancies.Controls) { if (control is DiscrepancyControlLight) { ((DiscrepancyControlLight)control).Deleted -= ConditionControlDeleted; control.Dispose(); } else if (control != panelAdd) { control.Dispose(); } } panelDiscrepancies.Controls.Clear(); foreach (Control control in panelMEL.Controls) { if (control is DiscrepancyControlLight) { ((DiscrepancyControlLight)control).Deleted -= ConditionControlDeleted; control.Dispose(); } } panelMEL.Controls.Clear(); foreach (Control control in panelOldMEL.Controls) { if (control is DiscrepancyControlLight) { ((DiscrepancyControlLight)control).Deleted -= ConditionControlDeleted; control.Dispose(); } } panelOldMEL.Controls.Clear(); #endregion #region Добавление неисправностей var discrepancies = Flight != null && Flight.Discrepancies != null ? Flight.Discrepancies.Where(d => d.DirectiveId <= 0).ToList() : new List <Discrepancy>(); int count = discrepancies.Count; for (int i = 0; i < count; i++) { // Добавляем разделитель if (i > 0) { Delimiter delimiter = new Delimiter { Style = DelimiterStyle.Solid, Orientation = DelimiterOrientation.Horizontal, Margin = new Padding(0, 10, 0, 10), Width = 1000 }; panelDiscrepancies.Controls.Add(delimiter); } // Добавляем контрол - неисправность _discrepanciesCount++; DiscrepancyControlLight d = new DiscrepancyControlLight { Index = _discrepanciesCount, EnableExtendedControl = count >= 2, _discrepancies = Discrepancies }; d.Deleted += ConditionControlDeleted; if (Flight != null && i < discrepancies.Count) { d.Discrepancy = discrepancies[i]; if (discrepancies[i].Description == "") { d.Discrepancy.Description = "No"; } } else if (Flight != null) // Не будем создавать Discrepancy, если объект Flight не задан - черевато дальнейшими ошибками { Discrepancy discrepancy = new Discrepancy(); d.Discrepancy = discrepancy; } _discrepanciesCount++; panelDiscrepancies.Controls.Add(d); } panelDiscrepancies.Controls.Add(panelAdd); #endregion #region Добавление неисправностей MEL var mels = Flight != null && Flight.Discrepancies != null ? Flight.Discrepancies.Where(d => d.DirectiveId > 0).ToList() : new List <Discrepancy>(); count = mels.Count(); for (int i = 0; i < count; i++) { // Добавляем разделитель if (i > 0) { Delimiter delimiter = new Delimiter { Style = DelimiterStyle.Solid, Orientation = DelimiterOrientation.Horizontal, Margin = new Padding(0, 10, 0, 10), Width = 1000 }; panelMEL.Controls.Add(delimiter); } // Добавляем контрол - неисправность _discrepanciesCount++; DiscrepancyControlLight d = new DiscrepancyControlLight { Index = _discrepanciesCount, EnableExtendedControl = count >= 2 }; d.Deleted += ConditionControlDeleted; if (Flight != null && i < mels.Count()) { d.Discrepancy = mels[i]; if (mels[i].Description == "") { d.Discrepancy.Description = "No"; } } else if (Flight != null) // Не будем создавать Discrepancy, если объект Flight не задан - черевато дальнейшими ошибками { Discrepancy discrepancy = new Discrepancy(); d.Discrepancy = discrepancy; } _discrepanciesCount++; panelMEL.Controls.Add(d); } #endregion #region Добавление неисправностей с прошлых полетов, незакрытых на тек. полет count = 0; if (Flight != null && Flight.UnclosedDiscrepancies != null) { count = Flight.UnclosedDiscrepancies.Count; } for (int i = 0; i < count; i++) { // Добавляем разделитель if (i > 0) { Delimiter delimiter = new Delimiter { Style = DelimiterStyle.Solid, Orientation = DelimiterOrientation.Horizontal, Margin = new Padding(0, 10, 0, 10), Width = 1000 }; panelOldMEL.Controls.Add(delimiter); } // Добавляем контрол - неисправность var d = new DiscrepancyControlLight { EnableExtendedControl = count >= 2 }; d.Deleted += ConditionControlDeleted; if (Flight != null && Flight.UnclosedDiscrepancies != null && i < Flight.UnclosedDiscrepancies.Count) { d.Discrepancy = Flight.UnclosedDiscrepancies[i]; if (Flight.UnclosedDiscrepancies[i].Description == "") { d.Discrepancy.Description = "No"; } } else if (Flight != null) // Не будем создавать Discrepancy, если объект Flight не задан - черевато дальнейшими ошибками { Discrepancy discrepancy = new Discrepancy(); d.Discrepancy = discrepancy; } panelOldMEL.Controls.Add(d); } #endregion }