2016-03-05 39 views
1

我有以下問題我有2個窗體窗體並在它們之間發送數據我想通過Form2(這是由Form1調用)構造函數我將傳遞引用Form1 。在兩個窗體窗體之間發送數據,其中一個窗體是單身人士

像這樣public Form2(Form callingForm) { mainForm = callingForm as Form1; InitializeComponent(); }

但我想窗體2是單身,不知何故,我不知道該如何實現與傳球Form1的參考Form2的一起。我回顧了文檔https://msdn.microsoft.com/en-us/library/ff650316.aspx,我不知道如何編輯這個例子以適應我的需求。所以我能夠使單例構造函數或使構造函數引用form1,但不是兩者。

回答

1

如果Form1是您的應用程序的主窗體,那麼您應該使用 - >Appliction.MainForm。這樣你就不需要參數。

編輯:我並沒有試圖成爲鈍頭,也沒有回答你的問題。你可以使用多個構造函數創建一個帶參數的單例,但是,我會盡量避免它。

private Singleton(param1,param2) 
public static Singleton MyInstance(param1,param2) 
+0

謝謝你,Application.OpenForms [0]解決了這個問題。 –

0

我不知道我很理解你的問題,但我認爲你可以實現懶惰..(懶惰本身實現Singleton模式)。也許是這樣的:

class Form1 
{ 
    public Form2 Callee 
    { 
    get; 
    set; 
    } 

    public Form1() 
    { 
    Callee = Form2.Instance(this).Value; 
    } 
} 

class Form2 
{ 
    public static Lazy<Form2> Instance(Form1 caller) 
    { 
    return new Lazy<Form2>(() => 
    { 
     return new Form2(caller); 
    }); 
    } 

    public Form1 Caller 
    { 
    get; 
    private set; 
    } 

    Form2(Form1 caller) 
    { 
    Caller = caller; 
    } 
} 
0

好吧,我似乎已經解決了這個問題,這裏是代碼:

private Form1 mainForm = null; 
public Form2(Form callingForm) 
    { 
     mainForm = callingForm as Form1; 
     InitializeComponent(); 
    } 

    public static Form2 Instance 
    { 
     get 
     { 
      if (instance == null) 
      { 
       instance = new Form2(Application.OpenForms[0] as Form1); 
      } 
      return instance; 
     } 
    } 

@lrb謝謝,基本上我在這一行有問題的辯論,因爲不能通過任何參數

instance = new Form2(Application.OpenForms[0] as Form1); 

和Application.OpenForms [0]幫助。

相關問題