繁体   English   中英

自定义用户控件

[英]custom user control

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

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

在您的用户控件中,当您将此用户控件添加到表单时,将“text-box” Modifiers属性的控件设置为Public .so。 你可以访问你的文本框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");
        }

您可能需要为要从外部访问的控件的事件手动创建公共事件。

另一种方法是,当你在用户控件中初始化那些控件时,使用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

编辑:我不建议将自定义控件的内部控件设置为公共属性,因为它违反了封装原则。 你设计自己的控件来做一些特定的工作,控件的客户应该不知道它的内部构成。 如果您将来更改控件的内部组合(例如,切换到某些第三方文本框控件),您只需要在自定义控件类中进行更改,并且其客户端仍然可以正常工作,就好像什么也没发生一样。 这是一个关于封装的好方法 =)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM