自定义用户控件

自定义用户控件

问题描述:

我设计自定义用户控件。这个用户控件包括: 文本框,复选框,按钮。自定义用户控件

现在我想要消耗我的项目中设计的用户控件,但问题是我无法访问文本框,复选框,按钮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关于封装=)