Je pense que la cause première de votre problème est que vous n'avez pas séparé vos soucis entre le formulaire et le contrôle correctement.
Puisque vous avez un contrôle (un peu générique), il ne devrait pas dépendre du formulaire. Toute la logique du contrôle devrait résider dans le contrôle lui-même. Le formulaire ne doit contenir que le contrôle: ajoutez-le, définissez les champs publics, appelez les méthodes publiques, etc. toute autre chose est une violation de l'encapsulation.
Parfois, les contrôles peuvent avoir besoin de savoir des choses sur leur forme parent. Dans ce cas, je suggérerais quelque chose d'aussi simple que d'ajouter un champ Parent
au contrôle enfant.
Si vous avez besoin de quelque chose de plus spécifique à partir du formulaire, vous pouvez toujours ajouter une interface; L'interface doit uniquement répertorier les éléments dont le contrôle a besoin à partir du formulaire. Par exemple, si vous avez besoin de la taille, vous pouvez ajouter:
public interface IControlParent {
int Width { get; }
int Height { get; }
}
De cette façon, vous voyez clairement les dépendances (ce que les besoins de contrôle de la société mère), et si les changements de type parent/contrat, vous n » Vous devez en faire autant pour changer votre classe de contrôle.
Pouvez-vous extraire les classes non-UI du projet Forms et créer une DLL? –
Créez un troisième projet qui contient tout * le formulaire et le contrôle utilisateur. Vous n'obtiendrez jamais vos builds pour fonctionner correctement sans cela. –