/// <summary> /// Start or Stop to log the events' message /// </summary> /// <param name="mode">true represents for logging events started,false is to stop log events</param> private void StartStop(bool mode) { isWorking = mode; if (isWorking) { customTaskPanel.Clear(); commandBarButtonStart.Caption = StopJob; // Get previous Selected Object and Type Name selectedTypeNameLastTime = GetSelectedTypeName(); // when User restarts to log events, // Must Initialize previous Selected shape and previous Existing shapes again. FillCollections(); shapesExistingLastTime = shapesExistingNow; shapeSelectedLastTime = shapeSelectedNow; // Initialize previous Selected Object and Type Name again selectedTypeNameLastTime = selecteTypeNameNow; } else { commandBarButtonStart.Caption = StartJob; // Dispose object shapeSelectedLastTime = null; shapeSelectedNow = null; shapesExistingLastTime = null; shapesExistingNow = null; selectedTypeNameLastTime = null; selecteTypeNameNow = null; } }
/// <summary> /// Get Created Shape Collection or Removed Shape Collection /// </summary> /// <param name="shapesToCheck">Shapes Collections to be Checked</param> /// <returns>Return ShapesCreated Collection or ShapesRemoved</returns> public MyShapes GetShapesMissingIn(MyShapes shapesToCheck) { MyShapes newShapes = new MyShapes(); foreach (MyShape shape in myShapes) { if (shapesToCheck == null || !shapesToCheck.Contains(shape.ID)) { newShapes.Add(shape); } } return(newShapes); }
/// <summary> /// Analyze Existing Shapes /// </summary> private void ProcessExistingShapes() { MyShapes shapesCreated = shapesExistingNow.GetShapesMissingIn(shapesExistingLastTime); MyShapes shapesRemoved = shapesExistingLastTime.GetShapesMissingIn(shapesExistingNow); // ShapesRemoved Event Occurs If the count of the Removed Shapes is not zero. // Also, the number of Removed Shapes will be shown in Task Panel. if (shapesRemoved.Count != 0) { ShapesRemoved(shapesRemoved); } if (shapesCreated.Count != 0) { ShapesCreated(shapesCreated); } }
// Initialize Control private void InitializeCustomComponents() { // Add a custom commandbar button and set the name is "Start checking shapes" commandBarStart = this.Application.CommandBars.ActiveMenuBar; // Add the commandbar button into the commandbar commandBarButtonStart = (Office.CommandBarButton)commandBarStart.Controls.Add(Office.MsoControlType.msoControlButton, Before: 1, Temporary: true); commandBarButtonStart.Style = Office.MsoButtonStyle.msoButtonCaption; commandBarButtonStart.Caption = StartJob; commandBarButtonStart.FaceId = 60; commandBarButtonStart.Visible = true; // Register click event of commandbarbutton commandBarButtonStart.Click += new Office._CommandBarButtonEvents_ClickEventHandler(commandBarButtonStart_Click); // Use CommandBars.OnUpdate event to detect shapes' event commandBars = this.Application.CommandBars; commandBars.OnUpdate += new Office._CommandBarsEvents_OnUpdateEventHandler(commandBars_OnUpdate); // Initialize Task Panel // set the Position and width of task panel customTaskPanel = new CustomTaskPanel(); Microsoft.Office.Tools.CustomTaskPane mycustomerTaskPane = this.CustomTaskPanes.Add(customTaskPanel, "Custom Task Panel Tracking Event"); mycustomerTaskPane.Visible = true; mycustomerTaskPane.Width = 430; mycustomerTaskPane.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight; // Initialize Shapes in active worksheet Excel.Worksheet shapeworksheet = this.Application.ActiveSheet; Excel.Shape shapeRect; Excel.Shape shapeCircle; shapeRect = shapeworksheet.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, 60, 80, 80, 30); shapeCircle = shapeworksheet.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeOval, 200, 30, 50, 50); rectangleShape = new MyShape(shapeRect); circleShape = new MyShape(shapeCircle); // Initialize Shapes and Selected shape before the shapes change shapeSelectedLastTime = GetShapeSelected(); shapesExistingLastTime = new MyShapes(shapeworksheet); }
/// <summary> /// Get Selected shape and Existing shapes /// </summary> private void FillCollections() { if (selecteTypeNameNow == null || selectedTypeNameLastTime == null) { customTaskPanel.AddMessage("The type name of the selected object is " + selectedTypeNameLastTime); } else { if (selecteTypeNameNow != selectedTypeNameLastTime) { customTaskPanel.AddMessage("The type name of the selected object is " + selecteTypeNameNow); } } // Get the current selected shape and current existing shapes shapeSelectedNow = GetShapeSelected(); shapesExistingNow = new MyShapes(Application.ActiveSheet); // Get the current Selected Object and current Type Name selecteTypeNameNow = GetSelectedTypeName(); }
/// <summary> /// CommandBars Update function /// </summary> private void commandBars_OnUpdate() { if (!isWorking) { return; } selecteTypeNameNow = GetSelectedTypeName(); // Initialize current Selected shape and current Existing shapes FillCollections(); // detect whether the custom events occur ProcessExistingShapes(); ProcessSelectedShape(); // Initialize previous Selected shape and previous Existing shapes again shapesExistingLastTime = shapesExistingNow; shapeSelectedLastTime = shapeSelectedNow; // Initialize previous Selected Object and Type Name again selectedTypeNameLastTime = selecteTypeNameNow; }
/// <summary> /// Occurs when a shape is Created /// </summary> /// <param name="myshape">The Created shape</param> private void ShapesCreated(MyShapes shapesCreated) { customTaskPanel.AddMessage("ShapeCreated Event Occurs." + shapesCreated.Count.ToString() + " shape(s) are added to the Sheet.Shapes collection."); }
/// <summary> /// Occurs when a shape(s) is removed from the Shapes collection of the current sheet /// </summary> /// <param name="shapesRemoved">The removed shapes</param> private void ShapesRemoved(MyShapes shapesRemoved) { customTaskPanel.AddMessage("ShapesRemoved Event Occurs." + shapesRemoved.Count.ToString() + " shape(s) are removed from Sheet.Shapes."); }