2011-11-07 47 views
2

我創建了一個使用TabControl的表單應用程序。對於每個選項卡,我想放置一個包含所有其他控件的UserControl(在同一個項目中創建)。但是,我需要將一些信息從主窗體傳遞給UserControl,以便使用事件,方法等工作屬性。我該怎麼做/我該怎麼做?c#Forms Project:將信息傳遞給用戶控件

我試着用參數創建一個構造函數,但隨後Designer失敗了,我必須進去並刪除添加的UserControl引用。

謝謝!

+0

構造函數參數是一個正確的方法。 (也可以通過接口抽象自定義對象參數來簡化測試)您可以在添加設計者開始抱怨之後提供代碼嗎? – sll

+0

您能否詳細說明「某些信息」是什麼? –

回答

0

構造函數參數是正確的方法。但是,爲了讓Designer能夠構造(並繪製)該對象的副本,仍然必須有一個默認構造函數。

我通常的解決方法是將一個條款,在默認構造方法,檢查,看看我們是在「設計模式」,並拋出一個異常,如果沒有:

public class MyForm: Form 
{ 
    public MyForm() 
    { 
     if(!DesignMode) throw new InvalidOperationException("Cannot use default constructor in production code"); 
    } 

    public MyForm(MyDependency dependent) 
    { 
     ... 
    } 
} 
0

您可以通過一個函數傳遞信息在usercontrol.cs文件中創建。

例如usercontrol.cs

public string name; 
public void SetName(string pname) 
{ 
this.name = pname; 
} 

或者你想更改按鈕的名稱

Button mybutton = new Button(); 
public void SetButtonName(string btname) 
{ 
this.mybutton.Text = btname; 
} 

現在你可以在你的mainform.cs調用這些函數

Myusercontrol usc = new Myusercontrol(); 
usc.SetName("this is string for 'name' string"); 
usc.SetButtonName("this is string for button text"); 
+0

屬性是你的朋友... –

0

嘗試創建您的構造函數,但也創建一個默認的無參數構造函數。

看一看at this question