我想访问列表框并将项目添加到我的自定义控件中,该控件是在运行时动态创建的。我想在自定义控件中按下按钮位置时添加项目,但它不起作用。我使用以下代码来工作:
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但它不起作用。上述功能在表单中运行良好,但无法在自定义控件中运行。
感谢。
答案 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";
}
}