[英]Accessing Form's Control from Custom Control
我想訪問列表框並將其添加到我的自定義控件中,該控件是在運行時動態創建的。 我想在自定義控件中按按鈕位置時添加項目,但是它不起作用。 我使用以下代碼工作:
private void button1_Click(object sender, EventArgs e)
{
Form1 frm = new Form1();
frm.ABC = "HI";
}
“ ABC”是表單上的Public字符串,即:
public string ABC
{
set { listBox1.Items.Add (value); }
}
當我在窗體上的Button上使用上述字符串時,它可以正常工作,並在lsitbox中添加值,但是當我在窗體中使用自定義控件的按鈕時,“ value”的文本會更改,但不會將其添加到列表中box。我也嘗試過Tabel,但無濟於事。 我將ListBox1的修改從“私有”更改為“公共”,但是它不起作用。 上面的函數在窗體中運行良好,但是無法在自定義控件中運行。
謝謝。
在主表單可以處理的子表單中公開一個事件(“ ItemAdded”或其他內容)。 通過EventArgs派生對象將數據傳遞給任何事件訂閱者。 現在,您的主窗體可以按需更新UI,而兩個類之間無需緊密耦合。 一堂課不應該知道另一堂課的UI布局,這是一個不好的習慣(這個問題浮出水面時,每個人似乎都在暗示一種習慣)。
我認為您應該使用的是
this.ParentForm
因此,在您的情況下應該是:
public string ABC
{
set { this.ParentForm.listBox1.Items.Add (value); }
}
最簡單的方法是將表單作為構造函數中的參數傳遞到自定義控件中,您可以從自定義控件中訪問它。
例如:
public class CustomControl
{
private Form1 _form;
public CustomControl(Form1 form)
{
_form = form;
}
private void button1_Click(object sender, EventArgs e)
{
_form.ABC = "HI";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.