2010-12-16 56 views
0

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

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

谢谢。

回答

-1

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

EX:

public class CustomControl 
{ 
    private Form1 _form; 

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

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

简单,但蹩脚。事件是要走的路。 – 2010-12-16 20:02:16

+0

嗨泰勒。当我使用你的方法时,它显示错误“对象引用未设置为对象的实例” – 2010-12-16 20:10:43

-1

我觉得你应该用的是

this.ParentForm 

所以你的情况应该是:

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

揭露的事件( “ItemAdded” 或无论什么)在您的主窗体可以处理的子窗体中。通过EventArgs派生对象将数据传递给任何事件订阅者。现在您的mainform可以根据需要更新UI,两个类之间没有紧密耦合。一个班级不应该了解另一个班级的用户界面布局,这是一个不好的习惯(每个人似乎都会提出这个问题出现的时候)。

相关问题