Normally, if you want to set properties on a form, you can construct the form, set the properties and then showthe form. This gives you time to set the properties before the Load event is raised.
Code would look like follows:
MyForm form = new MyForm();
form.PropertyA = ...;
form.PropertyB = ...;
form.ShowDialog(this);
A user control also has a load event. If you put this user control on a form, then the Load event of the user control is raised at the end of the form's InitializeComponent(). So during construction of the form, way before the properties of the form are set.
If one of the properties of the form must be passed to the user control, then you are too late.
The solution I use now is give the user control an initialize function, that would do the things the user control would do during the Load event. This initialize function is called during the form's Load.
Although this works, this seems like bypassing Microsoft's way of initializing forms. What is the proper way to load a user control if it needs some property values that are only known at run time?