本專題概要
引言
在上乙個專題中為大家介紹如何建立excel的解決方案,相信大家通過從上面乙個專題之後了解了excel的物件模型,以及office兩種解決方案的,看完上乙個專題之後,肯定很多朋友想為excel自定義屬於自己的ui介面,例如,有這樣的一些疑問——是否可以使用vsto來自定義選項卡呢? 是否可以自定義上下文選單的呢?如果你也有這些疑問的話,相信通過本專題你將會得到答案的,下面就開始我們本專題的介紹。
二、自定義任務窗體
在使用word2010的時候我們可以通過左邊的導航來看了解文件的結構,同時我們也可以在輸入框的地方輸入文本來進行搜尋,然而這個左邊的導航就是乙個任務窗體,相信通過下面的圖大家可以理解word中那部分是乙個任務窗體:
但是我們在使用excel中卻沒有找到類似的任務窗體,這時候大家肯定會有這樣乙個疑問——如果我想在excel也想實現乙個自定義任務窗體該怎麼辦呢?用vsto可以幫我們辦到嗎?答案是肯定的。首先先模擬乙個需求的,相信大家都知道使用f1是開啟乙個幫助文件,但是彈出的幫助文件是與excel在不同介面的,所以很多朋友在查閱幫助的文件的時候都需要縮小excel文件來查閱,這樣就顯得有些不方便了,我在使用的時候就想,能不能把幫助文件繼承在excel的右邊呢?這樣我們查閱excel幫助文件就方便多了,就不要縮小excel文件,或在excel和幫助文件之間左右切換了。既然有這種需求,我們就有實現它的必要性,下面就具體說說如何實現的:
有了上面的分析過程之後,相信大家看下面的**會比較容易理解,另外注意的一點是,因為我們要實現的幫助文件的任務窗體,由於幫助文件是在瀏覽器中顯示的,這樣我們就需要整合乙個瀏覽器
public三、自定義選項卡,即ribbonpartial
class
thisaddin
private
void thisaddin_shutdown(object
sender, system.eventargs e)
}
上面實現的任務窗體在excel一開啟的時候就會顯示停靠在excel的右邊,如下圖所示:
然而當我們點選任務窗體中的"x"按鈕就是關閉任務窗體,關閉之後就有乙個問題,如果我們又想把幫助任務窗體顯示出來怎麼辦呢?因為在word中的導航窗體也不是一開始就顯示的(有些朋友可能開啟的word文件沒有導航窗體),此時我們通過勾選檢視選項卡中 「導航窗格」或點選開始選項卡中的查詢按鈕來顯示導航窗體:
此時,我們就想在excel中是否可以自定義乙個選項卡,通過選項卡中按鈕來顯示/隱藏 excel的幫助任務窗體呢?下面就具體介紹如何建立乙個自定義選項卡:
右鍵你的excel專案,新增—>新建項,在彈出的新增新項視窗中選擇 "功能區(視覺化設計器)"
輸入名稱之後單擊新增按鈕
設計選項卡ui介面,本例子中新增了乙個togglebutton.
通過上面的步驟就可以建立乙個自定義選項卡,這種方式建立的選項卡在excel專案(針對的是外接excel專案型別)啟動的時候就會被載入。
下面具體介紹了如何設計選項卡(即ribbon):
2007 office system document: lists of control ids
2. 從工具箱中拖出乙個togglebutton,把label屬性設定為help,並把controlsize屬性設定為ribboncontrolsizelarge:
3. 雙擊 help togglebutton按鈕,實現它的單擊事件:
//通過上面的三步也就完成了乙個ribbon的建立了,當我們建立好乙個ribbon之後,我們可以通過我們自定義的ribbon下的按鈕來顯示/隱藏我們的任務窗體,但是到這裡,ribbon的開發並沒有結束,此時還有乙個問題就是——當我們點選 「excel help」右上角的x按鈕關閉時,我們ribbon下的按鈕狀態也要跟著更變(大家可以測試,當我們關閉word中的導航任務窗體時,試圖下的"導航窗格"核取方塊「也會跟著改變),此時我們就需要實現:點選關閉按鈕與help按鈕狀態同步的功能的,此時我們只需要對taskpane的visiblechanged事件進行處理就可以(因為關閉任務窗體就會觸發該事件,所以只需要把同步狀態的**放在該事件就可以了),具體**如下:幫助選項卡中togglebutton的單擊事件
private
void togglehelpbtn_click(object
sender, ribboncontroleventargs e)
//執行效果圖為:定義乙個任務窗體
internal
microsoft.office.tools.customtaskpane helptaskpane;
private
void thisaddin_startup(object
sender, system.eventargs e)
private
void thisaddin_shutdown(object
sender, system.eventargs e)
//
使用者點選 "excel help" 側邊欄右上角的x按鈕關閉它時
//我們需要正確同步 「幫助」按鈕的狀態
//我們可以通過處理 「excel help」側邊欄的visualchanged 事件完成
private
void helptaskpane_visiblechanged(object
sender, eventargs e)
四、自定義上下文選單
看完上面兩部分的實現之後,我在學習的過程中又想——能不能通過右鍵選單來顯示/隱藏任務窗體呢? 對於這點vsto也是可以做到的,我們只需要新增commandbarbutton物件(當我們右鍵乙個單元格(即為cell)的時候,我們可以看到一上下文選單,選單內所有控制項(不管是按鈕還是排序這樣的選單控制項)),然後設定該物件的屬性和新增乙個click事件,主要**如下:
// 新增乙個自定義按鈕到單元格上下文選單中cell"];執行效果為(這樣我們右鍵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);
五、小結
到這裡本專題的內容就介紹完了,本專題主要介紹如何為excel建立乙個自定義的任務窗體、ribbon和上下文選單,對於word和outlook這部分的內容我就不重複介紹,建立方式和excel的建立方式很類似。在下乙個專題中我將給大家介紹下如何建立word解決方案。
本專題所有原始碼:
VSTO 系列(06) 自定義任務窗格
任務窗格 task pane 是 vsto 提供的主要介面之一,執行時任務窗格的介面看起來如下。本文假設我們要實現乙個方便自己進行拷貝和貼上的多重剪貼簿,實現將單元格中需要反覆使用的文字載入到 listbox,並且能夠拷貝到選中的單元格中。任務窗格本質上是乙個 user control,在工程中新建...
十三 自定義元件
有時候需要自定義元件使得web程式更加豐富,extjs也提供了自定義元件的功能,主要通過ext.define來實現。下面先新建乙個mypanel.html檔案,其內容如下 然後新建乙個mypanel.js和xzypanel.js檔案,自定義的元件名稱為xzypanel,xzypanel.js檔案的內...
osgi 學習系列(三)自定義osgi控制台命令
為了後面demo的結果顯示需要先說下自定義osgi控制台命令,自定義命令的類必須實現org.eclipse.osgi.framework.console.commandprovider介面 該介面中只有乙個方法public string gethelp 用於在help方法中新增我們自定義命令的描述 ...