/// <summary> /// Обработчик события нажатия клавиш. Служит для "отмены удаления" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Window_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Escape) this.Cursor = Cursors.Arrow; if (e.Key == Key.System) AltFlag = true; if (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl) CtrlFlag = true; if (e.Key == Key.LeftShift || e.Key == Key.RightShift) ShiftFlag = true; if (e.Key == Key.Delete) { List<int> allSelected = dataObject.get_selected_ids(); foreach (int i in allSelected) { MoveRelation(i, false); dataObject.delete_object(i); myCanvas.Children.Remove((UIElement)getChildrenById(i)); } IncStatus(); } if (CtrlFlag && e.Key == Key.C) { Model copy = new Model(); copy = (Model)dataObject.DeepClone(dataObject); copy.clear_for_copy(); Clipboard.SetData("CustomerFormat", copy); copy.clear(); } if (CtrlFlag && e.Key == Key.X) { Model copy = new Model(); copy = (Model)dataObject.DeepClone(dataObject); copy.clear_for_copy(); Clipboard.SetData("CustomerFormat", copy); copy.clear(); List<int> allSelected = dataObject.get_selected_ids(); foreach (int i in allSelected) { MoveRelation(i, false); dataObject.delete_object(i); myCanvas.Children.Remove((UIElement)getChildrenById(i)); } IncStatus(); } if (CtrlFlag && e.Key == Key.V) { Model CopyModel = new Model(); if (Clipboard.ContainsData("CustomerFormat")) { CopyModel = Clipboard.GetData("CustomerFormat") as Model; CopyModel.editIds(dataObject.max_id+1); ResetAllSelected(); dataObject.reset_flags(); dataObject.merge(CopyModel); ShowInCanvas(CopyModel); List <int> newSelectedIds = dataObject.get_selected_ids(); foreach (int i in newSelectedIds) { SelectObject(getChildrenById(i)); } IncStatus(); } } if (CtrlFlag && e.Key == Key.A) { for (int i = 0; i < myCanvas.Children.Count; ++i) { SelectObject(myCanvas.Children[i]); } dataObject.select_all_flags(); } if (CtrlFlag && e.Key == Key.Z) { Undo(); } if (CtrlFlag && e.Key == Key.Y) { Redo(); } }