2009-02-26 7 views
1

suite à cette question:WinForms événements pour Héritant commandes pour l'interface utilisateur de style

Winforms Style/UI Look and Feel Tips

J'ai créé mes « contrôles de base » dont d'autres contrôles héritent. Pour tester, j'essaie de changer la police de l'étiquette de base. Mais il ne se propage pas aux contrôles qui en héritent. Sur l'un des formulaires, je peux voir que le fichier du concepteur définit les propriétés du contrôle, donc les propriétés de mon contrôle de base sont surchargées.

Sur le contrôle de base, j'utilise le constructeur pour définir les propriétés par défaut. Dois-je utiliser un événement différent? Si oui, lequel.

Voici le code pour l'un des contrôles de base basés sur des commentaires ...

Public Class InfoLabel 
    Inherits Label 

    Public Sub New() 
     ' This call is required by the Windows Form Designer. 
     InitializeComponent() 

     ' Add any initialization after the InitializeComponent() call. 
     Me.Font = New System.Drawing.Font("Tahoma", 14.25!) 
     Me.ForeColor = System.Drawing.Color.FromArgb(CType(CType(49, Byte), Integer), CType(CType(97, Byte), Integer), CType(CType(156, Byte), Integer)) 
     Me.AutoSize = False 

    End Sub 
End Class 

Les commandes de base montrent la boîte à outils des projets sur l'éditeur de WinForm. Les contrôles sont ensuite glisser/déposer à partir de la boîte à outils.

+0

Post un code, votre description ne pas aider. –

+0

exemple de code ajouté avec plus de commentaires. –

Répondre

2

Votre problème est la méthode InitializeComponent() de votre contrôle personnalisé. Je ne sais pas pourquoi c'est là. Vous obtiendriez cette méthode automatiquement si vous implémentiez un UserControl, mais en héritant d'un contrôle standard, cette méthode ne devrait pas être présente. Avec votre classe de base ayant une méthode InitializeComponent() et votre sous-classe en ayant également une, quelqu'un écrase quelqu'un d'autre.

Je viens de sous-classer une étiquette en C#. J'ai glissé ceci sur mon formulaire et la police affichée comme la nouvelle police, pas la police de la classe de base (Label). J'ai ensuite créé une deuxième étiquette, appelée MySubLabel, qui a hérité de la classe MyLabel. Lorsque j'ai changé ForeColor sur la classe MyLabel, le MySubLabel est automatiquement mis à jour.

Cela devrait donc fonctionner. Avertissement: dans Visual Studio, vous devez recompiler l'assembly avant d'essayer d'afficher les mises à jour dans le concepteur.

+1

D'accord, aucune idée d'où provient InitializeComponent(). C'est seulement pour les contrôles qui ont un concepteur personnalisé, comme Form et UserControl. Il suffit de le commenter et cela fonctionne comme prévu. –

+0

J'ai suivi vos pas et je ne peux pas le faire fonctionner. Est-ce VS drag/drop? Étapes: 1-Créer une nouvelle classe, collé votre code. 2-Projet compilé 3-glisser/déposer de la boîte à outils sur le formulaire. 4-il hérite des paramètres comme prévu 5-change prop. recompiler. 6 étiquettes qui ont été faites glisser/déposer sans changement –

Questions connexes