繁体   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