从自定义控件访问表单的控件

时间:2010-12-16 19:54:45

标签: c#

我想访问列表框并将项目添加到我的自定义控件中,该控件是在运行时动态创建的。我想在自定义控件中按下按钮位置时添加项目,但它不起作用。我使用以下代码来工作:

    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中添加了值,但是当我使用它来形成自定义控件的按钮时,'value'的文本发生了变化,但它没有添加列表框中的项目。我也在tabel上尝试但没有帮助。我将ListBox1的Modifires从Private更改为Public但它不起作用。上述功能在表单中运行良好,但无法在自定义控件中运行。

感谢。

3 个答案:

答案 0 :(得分:1)

在主表单可以处理的子表单中公开事件(“ItemAdded”或其他)。通过EventArgs派生对象将数据传递给任何事件订阅者。现在你的mainform可以随意更新UI,两个类之间没有紧密耦合。一个班级不应该知道另一个班级的UI布局,这是一个坏习惯(每个人似乎都会在这个问题出现时提出建议)。

答案 1 :(得分:-1)

我认为你应该使用的是

this.ParentForm

所以在你的情况下它应该是:

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

答案 2 :(得分:-2)

最简单的方法是将表单作为构造函数中的参数传递给自定义控件,以便您可以从自定义控件中访问它。

EX:

public class CustomControl
{
    private Form1 _form;

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

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