我在c#中设计了自定义用户控件。此用户控件包括: 文本框,复选框,按钮。
现在我想在我的项目中使用设计的用户控件,但问题是在我的表单中使用用户控件时我无法访问文本框,复选框,按钮EVENTS并且只有用户控件的事件。我可以在使用设计的用户控件时,是否可以访问每个对象事件?
答案 0 :(得分:1)
在您的用户控件中,将“text-box”Modifiers
属性的控件设置为Public
。所以当您将此用户控件添加到表单时。你可以访问你的文本框evens:
public Form1()
{
InitializeComponent();
userControl11.textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
}
void textBox1_TextChanged(object sender, EventArgs e)
{
MessageBox.Show("user control textbox.text changed");
}
答案 1 :(得分:0)
您可能需要为要从外部访问的控件的事件手动创建公共事件。
另一种方法是,在用户控件中初始化这些控件时,使用public而不是private(由VS自动生成),这些代码应该位于xxx.Designer.cs中,它们看起来像{{1 }}。然后可以通过private System.Windows.Forms.Button button1
访问它。但这样做,整个控件将可以从用户控件的外部访问,这对个人感觉不太好。
答案 2 :(得分:0)
我认为您应该将公共事件添加到自定义控件类中,并在那里进行订阅和取消订阅。就像那样:
public event EventHandler ComboboxClick
{
add { _combobox.Click += value; }
remove { _combobox.Click -= value; }
}
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/8627sbea(v=vs.71).aspx
编辑:我不建议将自定义控件的内部控件设置为公共属性,因为它违反了封装原则。你设计自己的控件来做一些特定的工作,控件的客户应该不知道它的内部构成。如果您将来更改控件的内部组合(例如,切换到某些第三方文本框控件),您只需要在自定义控件类中进行更改,并且其客户端仍然可以正常工作,就好像什么也没发生一样。这是关于封装的a good koan =)