简体   繁体   中英

custom user control

I have designed custom user control in c# .This user control is include : textbox,check box,button.

Now I want to consume designed user control in my project but the problem is I can't access to the textbox,checkbox,button EVENTS when consume user control in my form and there are only EVENTS for user control.how can I make it possible that each object events become accessible when consuming designed user control ?

In your user control set your control like "text-box" Modifiers property to Public .so when you add this user control to your form. you can access to your text box 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");
        }

you might need to manually create public events for the events of those controls which you want to be accessible from outside.

another way is, when initializing those controls in you user control, using public instead of private (which is automatically generated by VS), these code should be located in the xxx.Designer.cs, and they looks like private System.Windows.Forms.Button button1 . Then it can be accessed through MyUserControl.button1 . But doing so, the entire control will be accessible from outside of your user control, which does not feel very well personally.

I think you should add public events to your custom control class, and make subscribing and unsubscribing there. Just like that:

public event EventHandler ComboboxClick
{
   add { _combobox.Click += value; }
   remove { _combobox.Click -= value; }
}

For more information see http://msdn.microsoft.com/en-us/library/8627sbea(v=vs.71).aspx

Edit: I would not recomend setting inner controls of your custom control as public properties, because it's a violation of encapsulation principle. You design your own control to do some specific job and clients of the control should stay unaware of its inner composition. Should you change the inner composition of your control in future (switch to some 3rd party textbox control, for example), you would only need to make changes in your custom control class, and its clients would still work properly as if nothing has happend. Here's a good koan about encapsulation =)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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