1. 程式人生 > >一入程式設計深似海,從此BUG日日改!

一入程式設計深似海,從此BUG日日改!

xmal程式碼:[html] view plain copy print?
  1. <Windowx:Class="MyNoteBookProject.MainWindow"
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.         Title="MainWindow"Height="350"Width="525"Loaded="Window_Loaded">
  5.         <DockPanel
    >
  6.             <MenuDockPanel.Dock="Top"HorizontalAlignment="Left"VerticalAlignment="Top">
  7.                 <MenuItemHeader="File">
  8.                     <MenuItemHeader="New"></MenuItem>
  9.                     <MenuItemHeader="Open"></MenuItem>
  10.                     <MenuItem
    Header="Add"></MenuItem>
  11.                 </MenuItem>
  12.                 <MenuItemHeader="Edit">
  13.                     <MenuItemHeader="Cut"></MenuItem>
  14.                     <MenuItemHeader="Copy"></MenuItem>
  15.                     <MenuItemHeader="Paste"></MenuItem
    >
  16.                </MenuItem>
  17.                 <MenuItemHeader="Extend"Name="PlugInMenuItem"></MenuItem>
  18.             </Menu>
  19.         <TextBoxDockPanel.Dock="Bottom"Name="txt"></TextBox>
  20.     </DockPanel>
  21. </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?
  1. privatevoid Window_Loaded(object sender, RoutedEventArgs e)  
  2. {  
  3.     AddPlugInsToMenu();  
  4. }  
  5. //讀取程式集檔案,並生成 外掛按鈕
  6. privatevoid AddPlugInsToMenu() {  
  7.     // 獲取正在執行的程式集 的 物理路徑
  8.     String assPath = this.GetType().Assembly.Location;  
  9.     // 獲取 程式集 所有資料夾
  10.     String assDirPath = System.IO.Path.GetDirectoryName(assPath);  
  11.     // 外掛資料夾的路徑
  12.     String plugInDir = assDirPath + "\\plugs";  
  13.     // 掃描外掛資料夾中的 所有 程式集檔名(獲取所有dll檔案)
  14.     String[] dllFiles = System.IO.Directory.GetFiles(plugInDir, "*.dll");  
  15.     // 遍歷程式集檔案,並載入程式集檔案到記憶體
  16.     foreach(String strDll in dllFiles){  
  17.         // 根據程式集路徑 載入程式集 到記憶體
  18.         Assembly ass = Assembly.LoadFrom(strDll);  
  19.         // 判斷程式集中是否有外掛類
  20.             // 獲取程式集中的public類
  21.         Type[] types = ass.GetExportedTypes();  
  22.         Type notebookInterfaceType = typeof(MyNoteBookPlugInterfaceProject.IPlugIn);  
  23.         // 判斷是否實現了記事本介面
  24.         foreach(Type t in types){  
  25.             // 判斷t是否實現了 notebookInterfaceType 介面
  26.             if (t.<span style="background-color: rgb(255, 255, 153);">IsAssignableFrom</span>(notebookInterfaceType)) {  
  27.                 // 根據外掛類,建立menuitem,並新增到menu中
  28.                 PlugInMenuItem.Items.Add(new MenuItem { Header = t.Name });  
  29.             }  
  30.         }  
  31.         //// 建立menuitem,並新增到menu中
  32.         //PlugInMenuItem.Items.Add(new MenuItem { Header = strDll});
  33.     }  
  34. }  
        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?
  1. namespace MyNoteBookPlugInterfaceProject  
  2. {  
  3.     publicinterface IPlugIn  
  4.     {  
  5.         String ProcessText(String text);  
  6.     }  
  7. }  
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通過時間片非配演算法來迴圈執行任務,當前任務執行一個時間片後會切換到下一個任務.在切換時會儲存上一個任務的狀態,以便這個任