亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對于 VSTO Word 加載項:另存為后是否觸發了事件?

對于 VSTO Word 加載項:另存為后是否觸發了事件?

C#
米脂 2022-10-23 13:37:59
注意:盡管我的問題與VSTO Word post save event的問題相同,但目的和目標(以及所需的代碼)是不同的。VSTO Word 后保存事件中的 OP狀態:將文檔保存到磁盤后,我需要捕獲該事件,關閉文件,做我需要做的事情并重新打開它。我的需求不同??次业腛P。筆記結束我有一個VSTOWord 插件,旨在操作 RTF 文件(并且僅限 RTF 文件)的各種元素。加載項由功能區按鈕調用。如果用戶打開一個 RTF 文檔,然后執行 a save-as,我想捕獲一個事件,以便我可以檢查為另存為選擇的文件名,如果擴展名不是 ,則禁用調用我的加載項的按鈕.RTF。在我的功能區類功能區加載方法(在功能區類的設計器文件中聲明的事件處理方法:)中this.Load += new Microsoft.Office.Tools.Ribbon.RibbonUIEventHandler(this.Ribbon1_Load),我編寫了各種可用事件(例如,Globals.ThisAddIn.Application.DocumentChange += Application_DocumentChange;和Globals.ThisAddIn.Application.DocumentOpen += Application_DocumentOpen;),但所有可用事件都在save-as發生之前觸發,而不是之后觸發。我還在此功能區加載方法中設置了一個斷點。另存為后不再執行(我并不感到驚訝)我錯過了什么嗎?對于我的 VSTO Word 加載項,在我的功能區類中可捕獲的事件之后是否觸發了一個事件,該save-as事件將提供為save-as?更新我的代碼,反映 Cindy Meister 的回答感謝Microsoft Developer's Network 上的Joseph Fox 。我的代碼來自文檔保存事件注意:我的 VSTO 功能區類名為ClsLesCaveat. 這是一個新組,有兩個按鈕,位于現有Insert表中。它僅使用 VS Pro 2017 中的 VSTO 設計器創建。對我來說,我的功能區按鈕需要在兩種情況下禁用:1) 如果有人使用沒有 .RTF 擴展名的 Word 打開文件,我的功能區按鈕應該被禁用2) 如果有人使用 Word 打開一個 .RTF 文件(我的按鈕已啟用),但如果他們將另存為非 .RTF 文件,我的功能區按鈕應該禁用該非 .RTF 文檔注意:不要關心保存,因為我的功能區按鈕在打開或保存時啟用/禁用 - 否則using System;using System.IO;namespace LesCaveatAddIn{    public partial class ThisAddIn    {        private bool allowSave = false;        private void ThisAddIn_Startup(object sender, System.EventArgs e)        {            this.Application.DocumentBeforeSave += Application_DocumentBeforeSave;            this.Application.DocumentOpen += Application_DocumentOpen;        }        # On open, disable buttons, enable buttons only if file extension is .RTF        private void Application_DocumentOpen(Microsoft.Office.Interop.Word.Document Doc)        {            string extension = (Path.GetExtension(Doc.FullName)).ToUpper();            Type type = typeof(ClsLesCaveat);            ClsLesCaveat ribbon = Globals.Ribbons.GetRibbon(type) as ClsLesCaveat;            ribbon.objButtonAddFouoCaveat.Enabled = false;            ribbon.objButtonAddLesCaveat.Enabled = false;
查看完整描述

1 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

不,沒有事件可以捕獲任何“保存”或“保存后”操作。唯一與保存有關的是DocumentBeforeSave。

DocumentBeforeSave 確實提供了讓開發人員抑制內置 UI(SaveAs 對話框)以及取消觸發事件的操作的參數。這允許開發人員提供他們自己的保存(as)接口,這能夠確定文檔何時保存(as)并根據文件名、擴展名或任何標準采取所需的任何操作。

也可以使用 Word 的內置 SaveAs 對話框,而不是創建自己的對話框,盡管這在 C# 中有點迂回,因為它需要使用 PInvoke。這是一個示例,可讓您了解其工作原理(由于我在移動設備上未進行測試):

   private void ThisDocument_BeforeSave(object sender, object e)

    {

        //Suppress the built-in SaveAs interface (dialog box)

        e.SaveAsUi = false;

        //Cancel the default action

        e.Cancel = true;

        Word.Dialog dlg = wdApplication.Dialogs[Microsoft.Office.Interop.Word.WdWordDialog.wdDialogFileSaveAs];

        //Word dialog box parameters have to be accessed via Late-Binding (PInvoke) 

        //To get the path, use the Name property

        object oDlg = (object)dlg;

        object[] oArgs = new object[1];

        oArgs[0] = (object)@"";

        dlg.Show(ref missing);

        object fileName = oDlg.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, oDlg, oArgs);

    }

此處列出了可以使用的可用對話框參數。



查看完整回答
反對 回復 2022-10-23
  • 1 回答
  • 0 關注
  • 208 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號