2010-12-16 57 views
0

我想訪問列表框並將其添加到我的自定義控件中,該控件在運行時動態創建。當我按下自定義控件中的按鈕位置時,我想添加該項目,但它不起作用。我使用下面的代碼工作:從自定義控件訪問窗體的控件

private void button1_Click(object sender, EventArgs e) 
    { 
     Form1 frm = new Form1(); 
     frm.ABC = "HI"; 
    } 

的「ABC」是形式,即公共字符串:當我使用它形成的按鈕

public string ABC 
    { 
     set { listBox1.Items.Add (value); } 
    } 

上面的字符串工作正常窗體,並在lsitbox中添加值,但是當我使用它形成自定義控件的按鈕時,「值」的文本發生了更改,但它不會將該項添加到列表框中。我也嘗試過使用tabel,但沒有幫助。我將ListBox1的Modifires從Private更改爲Public,但它不起作用。上述功能在表單中運行良好,但無法從自定義控件中運行。

謝謝。

回答

-1

最簡單的方法是將表單傳遞給您的自定義控件作爲構造函數中的參數,以便您可以從自定義控件中訪問它。

EX:

public class CustomControl 
{ 
    private Form1 _form; 

    public CustomControl(Form1 form) 
    { 
     _form = form; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     _form.ABC = "HI"; 
    } 
} 
+0

簡單,但蹩腳。事件是要走的路。 – 2010-12-16 20:02:16

+0

嗨泰勒。當我使用你的方法時,它顯示錯誤「對象引用未設置爲對象的實例」 – 2010-12-16 20:10:43

-1

我覺得你應該用的是

this.ParentForm 

所以你的情況應該是:

public string ABC 
{ 
    set { this.ParentForm.listBox1.Items.Add (value); } 
} 
1

揭露的事件( 「ItemAdded」 或無論什麼)在您的主窗體可以處理的子窗體中。通過EventArgs派生對象將數據傳遞給任何事件訂閱者。現在您的mainform可以根據需要更新UI,兩個類之間沒有緊密耦合。一個班級不應該瞭解另一個班級的用戶界面佈局,這是一個不好的習慣(每個人似乎都會提出這個問題出現的時候)。

相關問題