Assuming that your question is about WinForms.
For notification: Expose an event on the userControl and link it to the event of the button, form knows it's children.
public class MyUserControl {
private Button myButton;
public event EventHandler MyControlButtonClicked;
public MyUserControl() {
...
myButton.Click += OnMyButtonClicked;
}
private void OnMyButtonClicked(object sender, EventArgs arguments) {
if (MyControlButtonClicked != null) {
MyControlButtonClicked(this, arguments);
}
}
}
In your form:
public class MyForm {
private MyUserControl userControl;
public MyForm() {
...
userControl.MyControlButtonClicked += OnUserControlButtonClicked;
}
private void OnUserControlButtonClicked(object sender, EventArgs arguments) {
// handle the button click here
}
}
For population: The same pattern, use your user control as a mediator. Add a public method on userControl that will do the listBox population and call it from your form.