我創建了一個使用TabControl的表單應用程序。對於每個選項卡,我想放置一個包含所有其他控件的UserControl(在同一個項目中創建)。但是,我需要將一些信息從主窗體傳遞給UserControl,以便使用事件,方法等工作屬性。我該怎麼做/我該怎麼做?c#Forms Project:將信息傳遞給用戶控件
我試着用參數創建一個構造函數,但隨後Designer失敗了,我必須進去並刪除添加的UserControl引用。
謝謝!
我創建了一個使用TabControl的表單應用程序。對於每個選項卡,我想放置一個包含所有其他控件的UserControl(在同一個項目中創建)。但是,我需要將一些信息從主窗體傳遞給UserControl,以便使用事件,方法等工作屬性。我該怎麼做/我該怎麼做?c#Forms Project:將信息傳遞給用戶控件
我試着用參數創建一個構造函數,但隨後Designer失敗了,我必須進去並刪除添加的UserControl引用。
謝謝!
構造函數參數是正確的方法。但是,爲了讓Designer能夠構造(並繪製)該對象的副本,仍然必須有一個默認構造函數。
我通常的解決方法是將一個條款,在默認構造方法,檢查,看看我們是在「設計模式」,並拋出一個異常,如果沒有:
public class MyForm: Form
{
public MyForm()
{
if(!DesignMode) throw new InvalidOperationException("Cannot use default constructor in production code");
}
public MyForm(MyDependency dependent)
{
...
}
}
您可以通過一個函數傳遞信息在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");
屬性是你的朋友... –
嘗試創建您的構造函數,但也創建一個默認的無參數構造函數。
構造函數參數是一個正確的方法。 (也可以通過接口抽象自定義對象參數來簡化測試)您可以在添加設計者開始抱怨之後提供代碼嗎? – sll
您能否詳細說明「某些信息」是什麼? –