首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# Visio 二次開發:設備狀態追蹤(三)——刪除事件中處理 Undo/Redo 與日誌記錄完整實現

     編輯:關於C語言

刪除事件日誌記錄代碼


private void visioEventSink_OnShapeDelete(object sender, EventArgs e)
{
    Shape shape = (Shape)sender;
    string strDeviceType = string.Empty;
    string strDeviceName = string.Empty;
    string strDeviceID = string.Empty;
    
    strDeviceType = VisioUtility.GetShapeCellValue(shape, "設備類型");
    strDeviceID = VisioUtility.GetShapeCellValue(shape, "GUID");
    
    ShapeLogInfo logInfo = new ShapeLogInfo();
    logInfo.ShapeType = strDeviceType;
    logInfo.ShapeID = shape.NameID;
    logInfo.ShapeName = VisioUtility.GetShapeCellValue(shape, "名稱");
    
    // 關鍵:判斷是否為 Undo/Redo 觸發
    if (shape.Application.IsUndoingOrRedoing)
    {
        ShapeLogInfo info = Portal.gc.gOperationLog.GetShape(strDeviceType, shape.NameID);
        if (info != null)
            strDeviceID = info.ShapeGuid; // 從歷史日誌取回 GUID
    }
    
    logInfo.ShapeGuid = strDeviceID;
    logInfo.ShapeStatus = ShapeStatus.DeleteShape;
    Portal.gc.gOperationLog.AddLog(logInfo);
}

IsUndoingOrRedoing 處理邏輯

  • 使用者按 Ctrl+Z / Ctrl+Y 觸發刪除/新增
  • 此時形狀屬性可能已重置,無法直接讀取 GUID
  • 從操作日誌 (gOperationLog) 查詢歷史記錄補齊 GUID
  • 確保刪除日誌記錄完整性,支援後續資料庫同步

應用價值

  • 儲存時依日誌增刪改資料庫關係/設備資訊
  • 圖面修訂歷程記錄 (誰、何時、何地、做什麼)
  • 支援協同編輯衝突檢測與合併
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved