10
votes

Utilisation d'un formulaire Windows comme classe abstraite - quel modèle à utiliser?

Je me débats avec une situation que je monte à nouveau, mais je ne suis pas sûr de savoir si la façon dont je fais des choses est fausse ou si je pouvais faire des choses d'une manière différente.

Exemple: P>

J'ai un formulaire Windows comportant une source de données avec certaines méthodes privées pour effectuer une validation des clics de souris DataGrid et d'interprétation de la souris droit sur le DataGridView, etc. Ce formulaire Windows est essentiellement une classe "abstraite" et est jamais instancié directement. P>

I Héritez de cette classe de base et personnalisez-la de différentes manières (modèle de modèle) par exemple Définissez les colonnes des méthodes de mise en forme de dataGridView et de formatage spécifiques spécifiques à ces colonnes, etc. p>

Lorsque je consomme ces classes, les méthodes publiques de la classe de base forment mon interface et je peux instancier le type particulier de DataGridView que je veux et le manipuler à travers l'interface commune. Charmant. P>

Le problème: p>

Le problème principal est que vous ne pouvez pas réellement déclarer une classe de formulaire Windows comme abstrait sans causer le concepteur de studio visuelle de jeter une tremblante car elle ne peut pas instantiaire Classes. P>

Quelques solutions: P>

pour le moment je suis "implémentant" ces méthodes dans la classe de base que je veux être remplacée avec: p>

    throw new NotSupportedException();


1 commentaires

Pourquoi ne pas hériter directement de GridView et créer un contrôle pour une utilisation sur un formulaire Windows?


3 Réponses :


1
votes

Vérifiez Cette méthode pour savoir comment créer les deux attributs nécessaires .

Vous avez besoin de la classe descripteur d'attribut et de type suivant (code prélevé dans urbanpotato) p> xxx pré>

attribue à votre formulaire abstrait comme ceci: p>

public class MyAbstractConcreteForm: MyAbstractForm 
{
    public MyAbstractConcreteForm() : base() { }
}


3 commentaires

@ Pierre-Alain Vigeant: la page Web que vous avez mentionnée est en voie de route.


Je soupçonne une modification de la façon dont le site Web fonctionne. La plupart des liens pointant là-bas ne résolvent plus. Voir la question Microsoft Connect à propos de ce problème connect.microsoft.com/visualstudio/feedback/Détails/322712/... et cela pointez sur le lien que j'ai écrit. Je vais essayer de trouver une autre référence.


La méthode ci-dessus serait probablement ok mais sheesh ce que beaucoup de travail!



0
votes

J'ai le même problème.
Cette page peut vous aider, même si ce n'est qu'une solution de contournement: hériter d'un formulaire d'un résumé Classe (et le faisant fonctionner dans le concepteur) .

Je n'ai trouvé aucune solution meilleure, mais il semble qu'il n'y ait pas. Donc, en effet, le concepteur Windows Forms vous oblige à adapter votre conception de classe.


0 commentaires

4
votes

Il existe de nombreuses façons de le faire en fonction de vos besoins.

  • mettre le formulaire contenu dans un contrôle utilisateur qui implémente une interface pour faire la logique personnalisée
  • Décrivez les classes de DataGridView qui implémente une interface pour faire la logique personnalisée
  • Comme mentionné, utilisez une classe de béton avec méthodes virtuelles au lieu d'utiliser un abstrait classe
  • ...

    Vous devrez choisir une option qui convient le mieux à vos besoins. Sans connaître le domaine et les détails dans lesquels votre question est posée, je ne pense pas que nous puissions vous donner une réponse à 100% certaine.


0 commentaires