WPS 加载项开发 > 文字 API 参考 > Document > 事件 > Document.XMLBeforeDelete 事件
用户从文档中删除 XML 元素时发生。如果同时从文档中删除了多个元素(例如,剪切和粘贴 XML 时),则删除的每个元素都会激发该事件。

语法

Private Sub 表达式_XMLBeforeDelete(DeletedRange, OldXMLNode, InUndoRedo)

表达式   一个代表 Document 对象的变量,该对象已在类模块中使用 WithEvents 关键字声明。有关配合使用事件与 Document 对象的信息,请参阅 配合使用事件与 Document 对象。

参数

名称 必选/可选 数据类型 说明
DeletedRange 必选 Range 正在被删除的 XML 元素的内容。如果仅有一个元素被删除且不关联文本,则 DeletedRange 参数不存在,因此将被设置为 Nothing。
OldXMLNode 必选 XMLNode 正在被删除的节点。
InUndoRedo 必选 Boolean 如果该参数值为 True,则表示已使用 WPS 中的“撤消”或“恢复”功能执行了该操作。

说明

如果 InUndoRedo 参数为 True,则不要在 XMLAfterInsert 和 XMLBeforeDelete 事件运行时更改文档中的 XML。

如果 InUndoRedo 参数为 False,则可以在文档中插入和删除 XML,但需小心不要造成 XMLAfterInsert 和 XMLBeforeDelete 事件不断相互取消,从而导致无限循环。可以使用全局 Boolean 变量防止出现无限循环,并在错误处理程序的起始处进行检查,如以下示例所示。

示例代码
let blnIsXMLDeleteRunning

function Document_XMLBeforeDelete(DeletedRange, OldXMLNode, InUndoRedo) {
    if(blnIsXMLDeleteRunning == false) {
        blnIsXMLDeleteRunning = true
        //Insert your event code here.
    } else {
        return 
    }
}

示例

以下示例在 XML 元素被删除时运行。如果元素中包含文本,则显示一条信息询问用户是否要删除元素所包含的文本。如果用户单击“否”响应,则元素的内容被复制到剪贴板上。

示例代码
function Document_XMLBeforeDelete(DeletedRange, OldXMLNode, InUndoRedo) {
    let intResponse

    if(InUndoRedo == false) { 
        if(DeletedRange) {
            intResponse = MsgBox("Are you sure you want to delete the text " + "\r\n" + DeletedRange.Text, jsYesNo)

            if(intResponse == jsResultNo) {
                DeletedRange.Copy()
                MsgBox("The text has been copied to the Clipboard." + "\r\n" +
                    "Position your cursor where you want to insert it, " +
                    "\r\n" + " and click Paste on the Edit menu.")
            }
        }
    }
}


请参阅