我设计自定义用户控件。这个用户控件包括: 文本框,复选框,按钮。自定义用户控件
现在我想要消耗我的项目中设计的用户控件,但问题是我无法访问文本框,复选框,按钮EVENTS消费用户控件在我的窗体中,并且只有EVENT用户control.how可以我有可能在使用设计好的用户控件时可以访问每个对象事件?
我设计自定义用户控件。这个用户控件包括: 文本框,复选框,按钮。自定义用户控件
现在我想要消耗我的项目中设计的用户控件,但问题是我无法访问文本框,复选框,按钮EVENTS消费用户控件在我的窗体中,并且只有EVENT用户control.how可以我有可能在使用设计好的用户控件时可以访问每个对象事件?
在您的用户控件中将您的控件设置为“文本框”Modifiers
属性为Public
.so当您将此用户控件添加到您的表单时。您可以访问到你的文本框中埃文斯:
public Form1()
{
InitializeComponent();
userControl11.textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
}
void textBox1_TextChanged(object sender, EventArgs e)
{
MessageBox.Show("user control textbox.text changed");
}
您可能需要为您想要从外部访问的控件的事件手动创建公共事件。
另一种方式是,在初始化用户控件中的这些控件时,使用public而不是private(由VS自动生成),这些代码应该位于xxx.Designer.cs中,它们看起来像private System.Windows.Forms.Button button1
。然后可以通过MyUserControl.button1
访问。但是这样做,整个控件都可以从您的用户控件之外访问,这对个人来说并不是很好。
我认为你应该将公共事件添加到你的自定义控件类中,并在那里进行订阅和取消订阅。就这样:
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关于封装=)