2013-04-04 77 views
1

我一直在試圖將我所有的類編譯成一個類庫,這是一個非常棒的功能。我的目標是讓我的所有代碼都不包含特定應用程序的代碼。當我嘗試添加引用父窗體的類時,我遇到了問題,因爲在類庫中沒有父窗體。如何在應用程序中創建父類之前,如何創建對它尚未知的表單的引用?從類庫中引用父窗體

public class Form1 : Form 
{ 

private Child child; 

public Form1() 
{ 
    child = new Child(this); 
} 


} 


public class Child 
{ 


    private Form1 parent; 
    public Child(Form1 parent) 
    { 
     this.parent = parent; 
    } 


} 

此代碼工作在一個標準的應用程序,但是當我在兒童類添加到類庫中,「Form1的」文本將無法編譯,因爲Form1中沒有類庫包含在內。有沒有辦法解決?感謝您的任何幫助。

+0

如果'Child'被放置在一個庫中,那麼它不應該對Form1有任何依賴關係 – 2013-04-04 12:28:31

+0

正如我對其他答案所評論的那樣。是不是最好的做法是在孩子中做一個事件,並從父母那裏訂閱它,而不是從孩子那裏調用父母的方法?謝謝。 – bassplayer142 2013-04-04 12:59:56

+0

使用事件打破視圖的依賴關係。如果導致困難,請使用界面。 – 2013-04-04 13:16:38

回答

1

由於Form1派生自Form,爲什麼不把Form作爲Child的構造函數的參數?

public class Child 
{ 
    private Form parent; 
    public Child(Form parent) 
    { 
     this.parent = parent; 
    } 
} 

這至少打破從你的類庫應用程序的依賴性,但它仍然需要在WinForms的依賴爲Form。這取決於你打算在你的代碼中用parent做什麼,但是這是否足夠。

+0

我試過這個,並意識到它不會工作,因爲我的子窗體正在調用父窗體上的函數。我是自學成才的,但由於依賴性問題,我開始認爲這是不好的做法。正確和更好的方法是在子表單上創建一個事件並在父表單上訂閱它。那麼當事件觸發時,它會在父窗體上調用該函數?謝謝。 – bassplayer142 2013-04-04 12:48:46

+0

是的,事件肯定會是更好的解決方案。 – Dutts 2013-04-04 14:48:01

相關問題