2013-12-19 16 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。 –

相关问题