franchesco totti
franchesco totti

Reputation: 644

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 ?

Upvotes: 3

Views: 650

Answers (3)

Andrei  Zubov
Andrei Zubov

Reputation: 578

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

Upvotes: 0

KF2
KF2

Reputation: 10171

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");
        }

Upvotes: 1

Ariex
Ariex

Reputation: 76

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 likeprivate 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.

Upvotes: 0

Related Questions