2013-12-19 20 views
0

是否有可能從另一個項目中將點擊方法添加到dll中的類中?
我想在類庫中創建一個類(Class1)並從中構建一個dll。
我將在引用dll的項目中使用該類。

這是我的課(1類)在dll中從另一個項目中獲得點擊方法

public class Class1 
{ 
    public ImageMap map = null; 
    public Class1(Form f) 
    { 
     map = new ImageMap(); 

     map.RegionClick += f.RegionMap_Clicked; 
    } 
} 

,這是我在另一個項目窗體(Form1)。

public partial class Form1 : Form 
{ 
    Class1 c = null; 

    public Form1() 
    { 
     InitializeComponent(); 

     c = new Class1(this); 
    } 

    void RegionMap_Clicked(int index, string key) 
    { 
     MessageBox.Show(key); 
    } 
} 

這是我第一次問這裏。所以,如果我的英語不好,很抱歉。

+0

是的,這是可能的。在DLL中不會改變任何東西。問題是什麼?你有沒有試過*它? –

+0

是的,我已經試過了。但它不起作用。該DLL不能被構建。它不承認Form1,因爲它是在另一個解決方案中構建的。 – Kuro13

+0

您是否試圖從DLL中或從包含Form1的項目添加事件處理程序? – Darkzaelus

回答

0

Class1的可以獨立從Form1中:

public class Class1 
{ 
    public ImageMap Map = null; 

    public Class1() 
    { 
     this.Map = new ImageMap(); 
    } 
} 

而且Form1上使用的Class1是什麼樣子:

public partial class Form1 : Form 
{ 
    private Class1 c = null; 

    public Form1() 
    { 
     InitializeComponent(); 

     this.c = new Class1(); 
     this.c.Map.RegionClick += this.RegionMap_Clicked; 
    } 

    private void RegionMap_Clicked(int index, string key) 
    { 
     MessageBox.Show(key); 
    } 
} 

因此,只有在Form1項目需要對Class1項目的引用。

+0

哦,是的,這可以工作。千萬不要想這個。謝謝你的回答... – Kuro13

0

是的,它是可能的,不要忘了讓您的處理程序公開:

public void RegionMap_Clicked(int index, string key) 
{ 
    MessageBox.Show(key); 
} 
+0

我無法將Form1傳遞給Class1構造函數參數,因爲它是在另一個項目中創建的。 – Kuro13

+0

這不是問題,你有沒有添加一個參考與Form1 assambly? http://msdn.microsoft.com/en-us/library/7314433t(v=vs.90).aspx – Tony

0

你應該這樣做

public class Class1 
{ 
    public ImageMap map = null; 
    public Class1(Form1 f) 
    { 
     map = new ImageMap(); 

     map.RegionClick += f.RegionMap_Clicked; 
    } 
} 

然後

public partial class Form1 : Form 
{ 
    Class1 c = null; 

    public Form1() 
    { 
     InitializeComponent(); 

     c = new Class1(this); 
    } 

    public void RegionMap_Clicked(int index, string key) 
    { 
     MessageBox.Show(key); 
    } 
} 

和病程的你shold添加使用這個大會。

我覺得現在這將很好地工作

+0

謝謝你的答案,但不能使用,因爲Class1和Form1是不同的解。所以,Form1可以通過「使用the.dll」來使用Class,但該類不能使用Form1作爲參數。 – Kuro13

+0

你的意思是不同的解決方案是在exe文件中的應用程序和Form1?對?所以你可以將Form1代碼移動到一個新的解決方案作爲DLL,並在應用程序和類使用DLL。 –

相關問題