自定义用户控件

时间:2013-04-06 04:35:57

标签: c# visual-studio-2010 events user-controls

我在c#中设计了自定义用户控件。此用户控件包括: 文本框,复选框,按钮。

现在我想在我的项目中使用设计的用户控件,但问题是在我的表单中使用用户控件时我无法访问文本框,复选框,按钮EVENTS并且只有用户控件的事件。我可以在使用设计的用户控件时,是否可以访问每个对象事件?

3 个答案:

答案 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 =)