簡體   English   中英

從自定義控件訪問表單的控件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM