private void keyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.ControlKey) { this.isCtrlPressed = true; } if (e.KeyCode == Keys.G) { if (this.isCtrlPressed) { if (selectedObject.getObjectList().Count() == 1 && selectedObject.getObjectList()[0] is Group) { this.ungroupSelectedObject((Group)selectedObject.getObjectList()[0]); } else { this.groupSelectedObject(); } } } if (e.KeyCode == Keys.Z) { if (this.isCtrlPressed) { if (undoStack.Count != 0) { IMemento memento = undoStack.Pop(); foreach (DrawingObject drawingObject in memento.getCurrent()) { drawingObjectList.Remove(drawingObject); } foreach (DrawingObject drawingObject in memento.getPrevious()) { if (drawingObject != null) { drawingObjectList.Add(drawingObject); } } redoStack.Push(new Memento(memento.getPrevious(), memento.getCurrent())); this.drawCanvas(); } } } if (e.KeyCode == Keys.Y) { if (this.isCtrlPressed) { if (redoStack.Count != 0) { IMemento memento = redoStack.Pop(); foreach (DrawingObject drawingObject in memento.getCurrent()) { if (drawingObject != null) { drawingObjectList.Remove(drawingObject); } } foreach (DrawingObject drawingObject in memento.getPrevious()) { drawingObjectList.Add(drawingObject); } undoStack.Push(new Memento(memento.getPrevious(), memento.getCurrent())); this.drawCanvas(); } } } if (e.KeyCode == Keys.R) { if (this.isCtrlPressed) { if (selectedObject.getState() is EditState || selectedObject.getState() is RotateState) { selectedObject.select(); this.drawCanvas(); } } } }