乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      VSTO之旅系列(三):自定義Excel UI

       法效天地 2014-01-29

      本專題概要

      • 引言
      • 自定義任務(wù)窗體(Task Pane)
      • 自定義選項(xiàng)卡,即Ribbon
      • 自定義上下文菜單
      • 小結(jié)

       

      引言

        在上一個(gè)專題中為大家介紹如何創(chuàng)建Excel的解決方案,相信大家通過(guò)從上面一個(gè)專題之后了解了Excel的對(duì)象模型,以及Office兩種解決方案的,看完上一個(gè)專題之后,肯定很多朋友想為Excel自定義屬于自己的UI界面,例如,有這樣的一些疑問(wèn)——是否可以使用VSTO來(lái)自定義選項(xiàng)卡呢? 是否可以自定義上下文菜單的呢?如果你也有這些疑問(wèn)的話,相信通過(guò)本專題你將會(huì)得到答案的,下面就開始我們本專題的介紹。

      二、自定義任務(wù)窗體

         在使用Word2010的時(shí)候我們可以通過(guò)左邊的導(dǎo)航來(lái)看了解文檔的結(jié)構(gòu),同時(shí)我們也可以在輸入框的地方輸入文字來(lái)進(jìn)行搜索,然而這個(gè)左邊的導(dǎo)航就是一個(gè)任務(wù)窗體,相信通過(guò)下面的圖大家可以理解Word中那部分是一個(gè)任務(wù)窗體:

        但是我們?cè)谑褂肊xcel中卻沒(méi)有找到類似的任務(wù)窗體,這時(shí)候大家肯定會(huì)有這樣一個(gè)疑問(wèn)——如果我想在Excel也想實(shí)現(xiàn)一個(gè)自定義任務(wù)窗體該怎么辦呢?用VSTO可以幫我們辦到嗎?答案是肯定的。首先先模擬一個(gè)需求的,相信大家都知道使用F1是打開一個(gè)幫助文檔,但是彈出的幫助文檔是與Excel在不同界面的,所以很多朋友在查閱幫助的文檔的時(shí)候都需要縮小Excel文檔來(lái)查閱,這樣就顯得有些不方便了,我在使用的時(shí)候就想,能不能把幫助文檔繼承在Excel的右邊呢?這樣我們查閱Excel幫助文檔就方便多了,就不要縮小Excel文檔,或在Excel和幫助文檔之間左右切換了。既然有這種需求,我們就有實(shí)現(xiàn)它的必要性,下面就具體說(shuō)說(shuō)如何實(shí)現(xiàn)的:

      首先在看具體代碼之前,我向大家分析下實(shí)現(xiàn)一個(gè)任務(wù)窗體的思路:

      • 首先,任務(wù)窗體是一個(gè)窗體,當(dāng)然就需要在創(chuàng)建的Excel解決方案中創(chuàng)建一個(gè)窗體的了,這里我們創(chuàng)建了一個(gè)用戶控件。
      • 創(chuàng)建和設(shè)計(jì)完用戶控件的界面之后,我們就需要把這個(gè)用戶控件添加到Excel中去了,然而我們?cè)谝郧暗慕佑|的開發(fā)中,添加控件都是把控件添加到某個(gè)幾個(gè)中去的,例如WinForm中要向窗體添加一個(gè)button按鈕,就需要把這個(gè)button添加進(jìn)Controls集合中,同樣VSTO也提供這樣一個(gè)把任務(wù)面板添加進(jìn)去的集合—— Microsoft.Office.Tools.CustomTaskPaneCollection,我們可以通過(guò) Globals.ThisAddIn.CustomTaskPanes這行代碼來(lái)獲得這個(gè)集合,然后調(diào)用Add方法就可以把我們自定義的任務(wù)面板添加進(jìn)Excel中了。
      • 添加進(jìn)去之后,我們還需要使任務(wù)面板顯示出來(lái),這樣就涉及了Visible屬性了,確實(shí) Microsoft.Office.Tools.CustomTaskPane 也有Visible屬性

        有了上面的分析過(guò)程之后,相信大家看下面的代碼會(huì)比較容易理解,另外注意的一點(diǎn)是,因?yàn)槲覀円獙?shí)現(xiàn)的幫助文檔的任務(wù)窗體,由于幫助文檔是在瀏覽器中顯示的,這樣我們就需要集成一個(gè)瀏覽器到我們的創(chuàng)建的用戶控件中的,大家看到瀏覽器這個(gè)詞可千萬(wàn)不要覺得有所畏懼,因?yàn)槲④浱峁┝?strong>WebBrowser控件來(lái)幫助我們實(shí)現(xiàn),對(duì)于瀏覽器的更多內(nèi)容可以參看我的這篇博客:自定義Web瀏覽器, 自定義任務(wù)窗體的代碼如下:

      復(fù)制代碼
       public partial class ThisAddIn
          {
              // 定義一個(gè)任務(wù)窗體
              internal Microsoft.Office.Tools.CustomTaskPane helpTaskPane;
      
              private void ThisAddIn_Startup(object sender, System.EventArgs e)
              {
                  // 把自定義窗體添加到CustomTaskPanes集合中
                  // ExcelHelp 是一個(gè)自定義控件類
                  helpTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(new ExcelHelp(""), "Excel Help");
                
                  // 使任務(wù)窗體可見
                  helpTaskPane.Visible = true;
                  // 通過(guò)DockPosition屬性來(lái)控制任務(wù)窗體的??课恢茫?            // 設(shè)置為 MsoCTPDockPosition.msoCTPDockPositionRight這個(gè)代表??康接疫?,這個(gè)值也是默認(rèn)值
                  //helpTaskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionRight;
              }
      
              private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
              {
              }
          }
      復(fù)制代碼

      三、自定義選項(xiàng)卡,即Ribbon

       上面實(shí)現(xiàn)的任務(wù)窗體在Excel一打開的時(shí)候就會(huì)顯示??吭贓xcel的右邊,如下圖所示:

        然而當(dāng)我們點(diǎn)擊任務(wù)窗體中的"X"按鈕就是關(guān)閉任務(wù)窗體,關(guān)閉之后就有一個(gè)問(wèn)題,如果我們又想把幫助任務(wù)窗體顯示出來(lái)怎么辦呢?因?yàn)樵赪ord中的導(dǎo)航窗體也不是一開始就顯示的(有些朋友可能打開的Word文檔沒(méi)有導(dǎo)航窗體),此時(shí)我們通過(guò)勾選視圖選項(xiàng)卡中 “導(dǎo)航窗格”或點(diǎn)擊開始選項(xiàng)卡中的查找按鈕來(lái)顯示導(dǎo)航窗體:

      此時(shí),我們就想在Excel中是否可以自定義一個(gè)選項(xiàng)卡,通過(guò)選項(xiàng)卡中按鈕來(lái)顯示/隱藏 Excel的幫助任務(wù)窗體呢?下面就具體介紹如何創(chuàng)建一個(gè)自定義選項(xiàng)卡:

      1. 右鍵你的Excel項(xiàng)目,添加—>新建項(xiàng),在彈出的添加新項(xiàng)窗口中選擇 "功能區(qū)(可視化設(shè)計(jì)器)" 
      2. 輸入名稱之后單擊添加按鈕
      3. 設(shè)計(jì)選項(xiàng)卡UI界面,本例子中添加了一個(gè)toggleButton.

      通過(guò)上面的步驟就可以創(chuàng)建一個(gè)自定義選項(xiàng)卡,這種方式創(chuàng)建的選項(xiàng)卡在Excel項(xiàng)目(針對(duì)的是外接Excel項(xiàng)目類型)啟動(dòng)的時(shí)候就會(huì)被加載。

      下面具體介紹了如何設(shè)計(jì)選項(xiàng)卡(即Ribbon):

      1. 設(shè)計(jì)RibbonTab,首先把ControlIdType屬性設(shè)置為Custom,不然我們?cè)O(shè)計(jì)的RibbonGroup部分將會(huì)在加載項(xiàng)選項(xiàng)卡下,然后設(shè)置Name為HelpTab,這樣我們創(chuàng)建的選項(xiàng)卡才會(huì)成為一個(gè)新的選項(xiàng)卡,如果我們想把ToggleButton放在Home選項(xiàng)卡下顯示,此時(shí)我們只需要把ControlIdType設(shè)置為Office,然后把OfficeId設(shè)置為TabHome, 具體情況大家可以測(cè)試看看的,關(guān)于Office 中內(nèi)置的Control ID 列表,大家可以從下面這個(gè)鏈接下載:  

        2007 Office System Document: Lists of Control IDs 

        2. 從工具箱中拖出一個(gè)ToggleButton,把Label屬性設(shè)置為Help,并把ControlSize屬性設(shè)置為RibbonControlSizeLarge:

       

        3. 雙擊 Help ToggleButton按鈕,實(shí)現(xiàn)它的單擊事件:

        // 幫助選項(xiàng)卡中toggleButton的單擊事件
              private void toggleHelpBtn_Click(object sender, RibbonControlEventArgs e)
              {
                  // 通過(guò)toggleHelpButton的選中狀態(tài)來(lái)控制幫助任務(wù)欄的顯示和隱藏
                  Globals.ThisAddIn.helpTaskPane.Visible = toggleHelpBtn.Checked;
              }

        通過(guò)上面的三步也就完成了一個(gè)Ribbon的創(chuàng)建了,當(dāng)我們創(chuàng)建好一個(gè)Ribbon之后,我們可以通過(guò)我們自定義的Ribbon下的按鈕來(lái)顯示/隱藏我們的任務(wù)窗體,但是到這里,Ribbon的開發(fā)并沒(méi)有結(jié)束,此時(shí)還有一個(gè)問(wèn)題就是——當(dāng)我們點(diǎn)擊 “Excel help”右上角的X按鈕關(guān)閉時(shí),我們Ribbon下的按鈕狀態(tài)也要跟著更變(大家可以測(cè)試,當(dāng)我們關(guān)閉Word中的導(dǎo)航任務(wù)窗體時(shí),試圖下的"導(dǎo)航窗格"復(fù)選框“也會(huì)跟著改變),此時(shí)我們就需要實(shí)現(xiàn):點(diǎn)擊關(guān)閉按鈕與Help按鈕狀態(tài)同步的功能的,此時(shí)我們只需要對(duì)TaskPane的VisibleChanged事件進(jìn)行處理就可以(因?yàn)殛P(guān)閉任務(wù)窗體就會(huì)觸發(fā)該事件,所以只需要把同步狀態(tài)的代碼放在該事件就可以了),具體代碼如下:

      復(fù)制代碼
      // 定義一個(gè)任務(wù)窗體
              internal Microsoft.Office.Tools.CustomTaskPane helpTaskPane;
      
              private void ThisAddIn_Startup(object sender, System.EventArgs e)
              {
                  // 把自定義窗體添加到CustomTaskPanes集合中
                  // ExcelHelp 是一個(gè)自定義控件類
                  helpTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(new ExcelHelp(""), "Excel Help");
                
                  // 使任務(wù)窗體可見
                  //helpTaskPane.Visible = true;
                  // 通過(guò)DockPosition屬性來(lái)控制任務(wù)窗體的??课恢?,
                  // 設(shè)置為 MsoCTPDockPosition.msoCTPDockPositionRight這個(gè)代表停靠到右邊,這個(gè)值也是默認(rèn)值
                  //helpTaskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionRight;
                  
                  // 當(dāng)用戶點(diǎn)擊 “Excel help”右上角的X按鈕關(guān)閉時(shí),我們需要同步選項(xiàng)卡上button的狀態(tài) 
                  helpTaskPane.VisibleChanged += new EventHandler(helpTaskPane_VisibleChanged);
      
                  // 添加上下文菜單
                  //AddToCellMenu();
              }
      
              private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
              {
              }
             
              // 用戶點(diǎn)擊  "Excel Help" 側(cè)邊欄右上角的X按鈕關(guān)閉它時(shí)
              // 我們需要正確同步 “幫助”按鈕的狀態(tài)
              // 我們可以通過(guò)處理 “Excel Help”側(cè)邊欄的VisualChanged 事件完成
              private void helpTaskPane_VisibleChanged(object sender, EventArgs e)
              {
                  // 獲得Help Ribbon 對(duì)象
                  Help helpRibbon = Globals.Ribbons.GetRibbon<Help>();
                  // 同步Help Ribbon下的"幫助"按鈕的狀態(tài)
                  helpRibbon.toggleHelpBtn.Checked = Globals.ThisAddIn.helpTaskPane.Visible;
              }
      復(fù)制代碼

      運(yùn)行效果圖為:

            

      四、自定義上下文菜單

       看完上面兩部分的實(shí)現(xiàn)之后,我在學(xué)習(xí)的過(guò)程中又想——能不能通過(guò)右鍵菜單來(lái)顯示/隱藏任務(wù)窗體呢? 對(duì)于這點(diǎn)VSTO也是可以做到的,我們只需要添加CommandBarButton對(duì)象(當(dāng)我們右鍵一個(gè)單元格(即為Cell)的時(shí)候,我們可以看到一上下文菜單,菜單內(nèi)所有控件(不管是按鈕還是排序這樣的菜單控件)),然后設(shè)置該對(duì)象的屬性和添加一個(gè)Click事件,主要代碼如下:

      復(fù)制代碼
        // 添加一個(gè)自定義按鈕到單元格上下文菜單中
                  contextMenu =Application.CommandBars["Cell"];
                  CommandBarButton commandBarbtn = (CommandBarButton)contextMenu.Controls.Add(MsoControlType.msoControlButton, Before: 1);
                  commandBarbtn.Tag = "Help_Tag";
                  commandBarbtn.Caption = "查看幫助";
                  commandBarbtn.FaceId = 49;
                  commandBarbtn.Click+=new _CommandBarButtonEvents_ClickEventHandler(commandBarbtn_Click);  
      復(fù)制代碼

      運(yùn)行效果為(這樣我們右鍵Cell的時(shí)候就會(huì)多出一個(gè)我們自己定義的 ”查看幫助“按鈕):

      五、小結(jié)

        到這里本專題的內(nèi)容就介紹完了,本專題主要介紹如何為Excel創(chuàng)建一個(gè)自定義的任務(wù)窗體、Ribbon和上下文菜單,對(duì)于Word和Outlook這部分的內(nèi)容我就不重復(fù)介紹,創(chuàng)建方式和Excel的創(chuàng)建方式很類似。在下一個(gè)專題中我將給大家介紹下如何創(chuàng)建Word解決方案。

      本專題所有源碼:http://files.cnblogs.com/zhili/ExcelHelpTaskPane.zip 

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多