Je SAVAIS qu'il y avait un moyen de le faire (et j'ai trouvé le moyen de le faire proprement). Sheng solution est exactement ce que j'ai trouvé comme solution temporaire, mais après un ami a souligné que l' Form
classe finalement hérité d'un abstract
classe, nous DEVRIONS être en mesure d'obtenir ce fait. Si ils peuvent le faire, nous pouvons le faire.
Nous sommes allés à partir de ce code pour le problème
Form1 : Form
Problème
public class Form1 : BaseForm
...
public abstract class BaseForm : Form
C'est là que la question initiale est entré en jeu. Comme dit avant, un ami l'a souligné qu' System.Windows.Forms.Form
implémente une classe de base abstraite. Nous avons été en mesure de trouver...
La preuve d'une meilleure solution
À partir de cela, nous savions qu'il était possible pour le concepteur de montrer une classe qui a mis en œuvre une base de classe abstraite, on ne pouvait tout simplement pas montrer une classe de concepteur qui a immédiatement mis en place une base de classe abstraite. Il en fallait au max 5 entre les deux, mais nous avons testé 1 couche d'abstraction et d'abord venu avec cette solution.
Solution Initiale
public class Form1 : MiddleClass
...
public class MiddleClass : BaseForm
...
public abstract class BaseForm : Form
...
Cela fonctionne et le designer rend bien, le problème est résolu.... sauf si vous avez un niveau supplémentaire de l'héritage dans votre application de production qui a été nécessaire en raison d'une insuffisance dans les winforms designer!
Ce n'est pas 100% infaillible solution, mais son assez bon. Fondamentalement, vous utilisez #if DEBUG
à venir avec le raffinement de la solution.
Raffiné Solution
Form1.cs
#if DEBUG
public class Form1 : MiddleClass
#else
public class Form1 : BaseForm
#endif
...
Classe moyenne.cs
public class MiddleClass : BaseForm
...
La classe baseform.cs
public abstract class BaseForm : Form
...
Ce que cela fait, c'est seulement l'utilisation de la solution décrite dans la section "solution initiale", si il est en mode de débogage. L'idée est que vous ne publiez jamais le mode de production via une version debug et que vous serez toujours la conception en mode de débogage.
Le concepteur fonctionnera toujours à l'encontre du code construit dans le courant de la mode, de sorte que vous ne pouvez pas utiliser le concepteur en mode release. Toutefois, aussi longtemps que vous le design en mode debug et release le code intégré dans la version de la mode, vous êtes bon pour aller.
La seule solution infaillible, si vous pouvez tester le mode de conception par l'intermédiaire d'une directive de préprocesseur.