OK. That's not really difficult: all you need to do is create an event in your UserControl, which is handled by your Form. Sounds complicated? It isn't not really.
In your user control, add this code:
public event EventHandler VisibilityChanged;
protected virtual void OnVisibilityChanged(EventArgs e)
{
EventHandler eh = VisibilityChanged;
if (eh != null)
{
eh(this, e);
}
}
Now, when you have changed the visibility of the panel inside the UserControl, signal the event:
OnVisibilityChanged(new EventArgs());
Add a property to your UserControl, which lets the outside world know what the visibility currently is:
public bool IsVisible { get { return myPanel.Visible; }}
And handle the event in your form.
When the handler is called, use the information:
void myUserControl_VisibilityChanged(object sender, EventArgs e)
{
myUserControl mc = sender as MyUserControl;
if (mc != null)
{
MyButton.Enabled = mc.IsVisible;
}
}