既然做好了框架,我們就希望為某個目標服務,我們要提供一些基本的服務,方便使用者繼續擴充套件他的功能。首先想到的功能就是,選單,工具欄的管理,接下來我們要實現一些更流行的功能,比如停靠工具欄等等。
如何實現這些服務呢?我們希望我們的外掛程式在執行時可以獲得應用程式本身的選單,工具條,停靠工具欄等等,然後向他們新增專案,比如加入乙個選單項,新增乙個工具欄按鈕。為了在執行時獲得某個選單或者工具欄,我們要為每乙個選單後者工具欄分配乙個key,然後放到乙個詞典中,當需要的時候,我們通過這個key來獲得例項。對於這個key呢,在我的例子比較簡單就是他的名字,我們來看看toolstripservice的**:
usingsystem;usingsystem.collections.generic;usingsystem.text;usingsystem.windows.forms;namespacepluginframework對於檢視或者是停靠工具欄來說,最好是不要直接在詞典中放入例項,而是應該將物件的型別放入到詞典中,因為,檢視和停靠工具欄本身都是從form派生而來,所以,當檢視或者是停靠工具欄被關閉的時候,物件就被銷毀了,而物件的建立在是外掛程式的load方法裡完成的,我們不可能再去呼叫外掛程式的load方法,這樣給我們的使用帶來了不便,所以我們應該註冊型別,然後在service中實現乙個show方法是比較合理的,這裡為了演示方便,我就直接在load裡面例項化了,並把例項放到了詞典裡。#region itoolstripservice memberspublicsystem.windows.forms.toolstrip gettoolstrip(stringtoolstripname)
returntoolstrip;
}publicvoidaddtoolstrip(stringtoolstripname, system.windows.forms.toolstrip toolstrip)
else
}}publicvoidaddtoolstrip(stringtoolstripname,
system.windows.forms.toolstrip toolstrip,
toolstripdockstate option)
elsebreak;casetoolstripdockstate.right:
break;casetoolstripdockstate.top:
break;casetoolstripdockstate.bottom:
break;}}
}publicvoidremovetoolstrip(stringtoolstripname)
elseelseelse
}toolstrips.remove(toolstripname);
}#endregion}
}
下邊這個圖例裡顯示了外掛程式加入的停靠工具欄,工具欄,乙個新的選單「view」和view選單的子選單:
最近實在是沒有時間,文章發的很慢,也寫的很錯,說的不清楚的地方,可以參考一下源**,望各位朋友見諒。
源**
構建外掛程式式的應用程式框架 七 基本服務
既然做好了框架,我們就希望為某個目標服務,我們要提供一些基本的服務,方便使用者繼續擴充套件他的功能。首先想到的功能就是,選單,工具欄的管理,接下來我們要實現一些更流行的功能,比如停靠工具欄等等。如何實現這些服務呢?我們希望我們的外掛程式在執行時可以獲得應用程式本身的選單,工具條,停靠工具欄等等,然後...
構建外掛程式式的應用程式框架 五 管理外掛程式
我們現在已經搭建了外掛程式式的應用程式框架,接下來的工作就是要充實框架的內容,提供基本的服務,也就是service。我想首要的任務就是提供外掛程式的管理服務,我在前面的文章也提到了,要實現動態載入必須要知道外掛程式寄宿在 哪些要載入,哪些不載入,這些就是這篇文章要討論的問題。首先解決的就是外掛程式放...
構建外掛程式式的應用程式框架 五 管理外掛程式
我們現在已經搭建了外掛程式式的應用程式框架,接下來的工作就是要充實框架的內容,提供基本的服務,也就是service。我想首要的任務就是提供外掛程式的管理服務,我在前面的文章也提到了,要實現動態載入必須要知道外掛程式寄宿在 哪些要載入,哪些不載入,這些就是這篇文章要討論的問題。首先解決的就是外掛程式放...