2009-02-26 6 views
1

Vererben Folgen auf diese Frage:WinForms Events für Steuerungen für UI Design

Winforms Style/UI Look and Feel Tips

So habe ich meine "base controls" erstellt, von denen andere Steuerelemente aus erben. Zu Testzwecken versuche ich, eine Schriftart des Basislabels zu ändern. Es wird jedoch nicht an die Steuerelemente weitergegeben, die von ihm erben. Auf einem der Formulare kann ich sehen, dass die Designerdatei die Eigenschaften für das Steuerelement festlegt, sodass die Eigenschaften meines Basissteuerelements überschrieben werden.

Auf dem Basissteuerelement verwende ich den Konstruktor, um die Standardeigenschaften festzulegen. Sollte ich ein anderes Event nutzen? Wenn ja, welcher. Hier

ist der Code für eine der Basissteuerungen basierend auf Kommentar Anfrage ...

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 

Die Basis zeigen Kontrollen der Projekte Toolbox auf dem winform Editor. Die Steuerelemente werden dann aus der Toolbox gezogen.

+0

Post einige Code, hilft Ihre Beschreibung nicht. –

+0

Codebeispiel hinzugefügt mit weiteren Kommentaren. –

Antwort

2

Ihr Problem ist die InitializeComponent() -Methode Ihres benutzerdefinierten Steuerelements. Ich habe keine Ahnung, warum das da ist. Sie würden diese Methode automatisch erhalten, wenn Sie ein Benutzersteuerelement implementieren, aber von einem Standardsteuerelement erben, dass diese Methode nicht vorhanden sein sollte. Wenn Ihre Basisklasse eine InitializeComponent() -Methode hat und Ihre Unterklasse ebenfalls eine hat, überschreibt jemand eine andere Person.

Ich habe gerade ein Label in C# subclassiert. Ich habe dies auf meinem Formular und der Schriftart gezogen, die als neue Schriftart angezeigt wird, nicht als Schriftart der Basisklasse (Label).

using System.Drawing; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public class MyLabel : Label 
    { 
     public MyLabel() 
     { 
      Font = new Font("Candara", 14); 
     } 
    } 
} 

Ich habe dann ein zweites Label namens MySubLabel erstellt, das von der MyLabel-Klasse geerbt hat. Wenn ich ForeColor in der MyLabel-Klasse änderte, wurde MySubLabel automatisch aktualisiert.

Das sollte also funktionieren.

Vorbehalt: In Visual Studio müssen Sie die Assembly neu kompilieren, bevor Sie versuchen, Updates im Designer zu sehen.

+1

Einverstanden, keine Ahnung woher InitializeComponent() kam. Dies ist nur für Steuerelemente mit einem benutzerdefinierten Designer wie Form und UserControl. Kommentiere es einfach aus deinem Code und es funktioniert wie erwartet. –

+0

Ich folgte deinen Schritten und ich kann es nicht zur Arbeit bringen. Ist es VS Drag/Drop? Schritte: 1 - Erstellen Sie eine neue Klasse und fügen Sie Ihren Code ein. 2-Kompiliertes Projekt 3-Drag/Drop aus Toolbox auf Formular. 4-es erbt Einstellungen wie erwartet 5-Change-Basisklasse prop. neu kompilieren. 6-Label, das war Drag/Drop keine Änderung –

Verwandte Themen