When you create a UserControl, you are creating a single, self contained object that you can include several times on the same form or on different forms - and you write it and use it the same way you would do for a whole form. Just like a form, the user control should have it's own properties and it's own events, which are all the outside world sees.
For example: the outside world does not need to know that your control has a button, because your control has an event which says "status changed" which the form handles. Inside your control you handle the button click event, and signal the event to the outside world:
public event EventHandler StatusChanged;
protected virtual void OnStatusChanged(EventArgs e)
{
EventHandler eh = StatusChanged;
if (eh != null)
{
eh(this, e);
}
}
private void myButton_Click(object sender, EventArgs e)
{
OnStatusChanged(new EventArgs());
}
Similarly, your control has properties which get and set the label content, the button colour, and so forth and the outside world interfaces with your control via those. When the outside world handles the event, it gets and sets the properties appropriately.
This way, you can safely change the internals of your control, and the outside world doesn't even have to know!