一入程式設計深似海,從此BUG日日改!
- <Windowx:Class="MyNoteBookProject.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="MainWindow"Height="350"Width="525"Loaded="Window_Loaded">
- <DockPanel
- <MenuDockPanel.Dock="Top"HorizontalAlignment="Left"VerticalAlignment="Top">
- <MenuItemHeader="File">
- <MenuItemHeader="New"></MenuItem>
- <MenuItemHeader="Open"></MenuItem>
- <MenuItem
- </MenuItem>
- <MenuItemHeader="Edit">
- <MenuItemHeader="Cut"></MenuItem>
- <MenuItemHeader="Copy"></MenuItem>
- <MenuItemHeader="Paste"></MenuItem
- </MenuItem>
- <MenuItemHeader="Extend"Name="PlugInMenuItem"></MenuItem>
- </Menu>
- <TextBoxDockPanel.Dock="Bottom"Name="txt"></TextBox>
- </DockPanel>
- </Window>
<Window x:Class="MyNoteBookProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<DockPanel>
<Menu DockPanel.Dock="Top" HorizontalAlignment="Left" VerticalAlignment="Top">
<MenuItem Header="File">
<MenuItem Header="New"></MenuItem>
<MenuItem Header="Open"></MenuItem>
<MenuItem Header="Add"></MenuItem>
</MenuItem>
<MenuItem Header="Edit">
<MenuItem Header="Cut"></MenuItem>
<MenuItem Header="Copy"></MenuItem>
<MenuItem Header="Paste"></MenuItem>
</MenuItem>
<MenuItem Header="Extend" Name="PlugInMenuItem"></MenuItem>
</Menu>
<TextBox DockPanel.Dock="Bottom" Name="txt"></TextBox>
</DockPanel>
</Window>
c#程式碼:[csharp] view plain copy print?
- privatevoid Window_Loaded(object sender, RoutedEventArgs e)
- {
- AddPlugInsToMenu();
- }
- //讀取程式集檔案,並生成 外掛按鈕
- privatevoid AddPlugInsToMenu() {
- // 獲取正在執行的程式集 的 物理路徑
- String assPath = this.GetType().Assembly.Location;
- // 獲取 程式集 所有資料夾
- String assDirPath = System.IO.Path.GetDirectoryName(assPath);
- // 外掛資料夾的路徑
- String plugInDir = assDirPath + "\\plugs";
- // 掃描外掛資料夾中的 所有 程式集檔名(獲取所有dll檔案)
- String[] dllFiles = System.IO.Directory.GetFiles(plugInDir, "*.dll");
- // 遍歷程式集檔案,並載入程式集檔案到記憶體
- foreach(String strDll in dllFiles){
- // 根據程式集路徑 載入程式集 到記憶體
- Assembly ass = Assembly.LoadFrom(strDll);
- // 判斷程式集中是否有外掛類
- // 獲取程式集中的public類
- Type[] types = ass.GetExportedTypes();
- Type notebookInterfaceType = typeof(MyNoteBookPlugInterfaceProject.IPlugIn);
- // 判斷是否實現了記事本介面
- foreach(Type t in types){
- // 判斷t是否實現了 notebookInterfaceType 介面
- if (t.<span style="background-color: rgb(255, 255, 153);">IsAssignableFrom</span>(notebookInterfaceType)) {
- // 根據外掛類,建立menuitem,並新增到menu中
- PlugInMenuItem.Items.Add(new MenuItem { Header = t.Name });
- }
- }
- //// 建立menuitem,並新增到menu中
- //PlugInMenuItem.Items.Add(new MenuItem { Header = strDll});
- }
- }
private void Window_Loaded(object sender, RoutedEventArgs e)
{
AddPlugInsToMenu();
}
//讀取程式集檔案,並生成 外掛按鈕
private void AddPlugInsToMenu() {
// 獲取正在執行的程式集 的 物理路徑
String assPath = this.GetType().Assembly.Location;
// 獲取 程式集 所有資料夾
String assDirPath = System.IO.Path.GetDirectoryName(assPath);
// 外掛資料夾的路徑
String plugInDir = assDirPath + "\\plugs";
// 掃描外掛資料夾中的 所有 程式集檔名(獲取所有dll檔案)
String[] dllFiles = System.IO.Directory.GetFiles(plugInDir, "*.dll");
// 遍歷程式集檔案,並載入程式集檔案到記憶體
foreach(String strDll in dllFiles){
// 根據程式集路徑 載入程式集 到記憶體
Assembly ass = Assembly.LoadFrom(strDll);
// 判斷程式集中是否有外掛類
// 獲取程式集中的public類
Type[] types = ass.GetExportedTypes();
Type notebookInterfaceType = typeof(MyNoteBookPlugInterfaceProject.IPlugIn);
// 判斷是否實現了記事本介面
foreach(Type t in types){
// 判斷t是否實現了 notebookInterfaceType 介面
if (t.<span style="background-color: rgb(255, 255, 153);">IsAssignableFrom</span>(notebookInterfaceType)) {
// 根據外掛類,建立menuitem,並新增到menu中
PlugInMenuItem.Items.Add(new MenuItem { Header = t.Name });
}
}
//// 建立menuitem,並新增到menu中
//PlugInMenuItem.Items.Add(new MenuItem { Header = strDll});
}
}
另一個記事本公司開發的dll中, 有一個介面, 在wpf程式中add ref這個程式集。其他開發plugin的公司,也必須add ref這個程式集。[csharp] view plain copy print?- namespace MyNoteBookPlugInterfaceProject
- {
- publicinterface IPlugIn
- {
- String ProcessText(String text);
- }
- }
namespace MyNoteBookPlugInterfaceProject
{
public interface IPlugIn
{
String ProcessText(String text);
}
}
相關推薦
一入程式設計深似海,從此BUG日日改!
xmal程式碼:[html] view plain copy print?<Windowx:Class="MyNoteBookProject.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentati
一入程式設計深似海
遞迴個人理解就是在一個方法裡通過不同的條件判斷不同的執行 如果條件滿足返回相應的返回值(void直接return) 如果條件不滿足處理下引數再次呼叫此方法直到條件滿足 如果沒有條件或條件不可能滿
5.21 - 一入Python深似海,從此節操是路人
passwd isdigit 操作 用戶名 continue str 字符串 () open 5.21,Python第二節,伊始,我感覺我來到了蜀道的山腳下,擡頭仰望,盡是巍峨,心底又不要臉的有一點兒小期待[*臉紅*] 這節課,我回憶起來都是些零零碎碎,講了字符串、列表、字
一入python深似海--python之道
ipp space 指導 eat pla cas sim cat esp python社區不乏幽默。先來看“python之道”這首詩。 導入this包: import this 輸出是一首詩,這首詩總結了Python的風格,能夠指導Pytho
一入python深似海,第二天
英文 並且 數字 例如 light 手動 python3 pan 圖片 python2.x與python3.x的區別: p2: 重復代碼 語言不統一 不支持中文
一入編碼深似海,在達觀資料做程式設計師是怎樣一種體驗?
在技術浪潮一波接一波推動人類社會前進的歷史程序當中,程式設計師始終是站在浪尖的群體。2014年起,把每年10月24日(2^10)定義為程式設計師節。這可能是唯一一個與數字緊密相關的節日——也體現了這個節日的含義:數字、程式碼、簡單。 作為一家程式設計師佔比60%以上的技術驅動公
一入python深似海--tuple和set
tuple(元組) 另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改,tuple屬於不可變物件。比如同樣是列出同學的名字: >>> classmates = ('Michael', 'Bob', 'Tra
為什麽說一入前端深似海?
理念 成功 真理 學什麽 很好 準備 事前 說話 剛才 俗話說:“男怕入錯行,女怕嫁錯郎”。現如今的社會更加驗證了這一真理。現在大火的前端行業吸引了一大批又一批的有誌青年。殊不知誘惑與殘酷是密不可分的,部分人的成功需要大部分人的失敗來襯托
各種高精——一入高精深似海,從此AC是路人.
組合數 合數 一個點 n) inf lan 分享圖片 mar deb 1.高精簡單操作 題面 https://www.luogu.org/problemnew/show/P2152 代碼 https://www.luogu.org/record/show?rid=56552
程式設計師在面試時都中過哪些套路?網友:我去,這套路深似海啊
浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>
記一次網頁超時登錄的Bug
首頁 size blog 登錄 style 評價 員工 bsp 返回 前幾天,在做全公司的員工測評工作,在一個頁面彈出導入頁面,並導入所有評價記錄,然後關閉掉這個導入頁面,最後返回當前頁面,返回時刷新當前頁面。 在返回的時候,就出現了“頁面超時登錄”
Kotlin開發一 kotlin程式設計基礎
1 kotlin資料型別 1 數字型別 kotlin中數字的表示方式和java一樣 kotlin中Float,Double,十六進位制,二進位制,10進位制的表示和java一樣,區別是kotlin中無八進位制表示 kotlin中數字型別沒有隱式轉換,必須顯示轉換 每個數
網路程式設計(一)——TCP程式設計基礎
目錄 1.基礎知識 1.1 IP協議 1.1.1 IP地址的分類 1.1.2 子網掩碼 1.1.3 網路位元組序 1.2傳輸控制協議(TCP) 1.2.1 TCP傳輸的特點 1.2.2 TCP的資料格式 1.2.3 建立連線與斷開連線 1.3.4
java學習筆記一java程式設計
JDK,Java Development Kit,java開發工具包; javac -version 測試設定是否正確; 學會使用Eclipse; 簡單的java應用程式 package java複習; public class FirstSample {  
一隻程式設計菜鳥對程式設計的思考
引言 程式設計,是一門實踐科學,意味著你學習程式設計的最好方式就是上手敲程式碼,但這意味著我們能因此輕視理論的學習嗎? 入門程式設計 上各大交流社群,提問該如何入門程式設計,五花八門的答案蜂擁而來。 但是總結一下,莫不就是一下幾種:  
複製一段字串作為程式輸入的BUG
有時候我們會通過從其他地方複製一段字串(裡面有多行語句)作為程式的輸入,這時換行符會出出現一些問題。 比如下面的程式: #include <stdio.h> #include <string.h> #define N 100 int main() { cha
如何最簡單地完成一項程式設計任務
今天看到阮一峰老師的網路部落格看到這麼一段話 如果你想最簡單地完成一項程式設計任務,我認為可以從四個方面入手 1. 清晰原則。 程式碼要寫得儘量清晰,避免晦澀難懂。清晰的程式碼不容易崩潰,而且容易理解和維護。重視註釋。不為了效能的一丁點提升,而大幅增加技術的複雜性,因為複雜的技術會使得日
第十一週程式設計總結--助教
題目1 列印九九口訣表 (1)實驗程式碼 #include<stdio.h> int main () { int i, j, n; scanf("%d", &n); for(i = 1;i<=n;i
第十一週程式設計總結
7-1 列印九九口訣表 (15 分) 下面是一個完整的下三角九九口訣表: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 &n
Java併發程式設計(一)------併發程式設計面臨的問題
1. 併發程式設計面臨的問題 併發程式設計是為了讓程式執行得更快,但是並不是啟動更多的執行緒就能讓程式最大限度的併發執行,通常在併發程式設計中會遇到下面的問題. 1.1 上下文切換 CPU通過時間片非配演算法來迴圈執行任務,當前任務執行一個時間片後會切換到下一個任務.在切換時會儲存上一個任務的狀態,以便這個任