Ich habe ein benutzerdefiniertes Registersteuerelement für meine Windows-Anwendung erstellt. Das benutzerdefinierte Registersteuerelement erweitert System.Windows.Forms.TabControl. Der Grund, warum ich ein benutzerdefiniertes Registerkartensteuerelement erstellt habe, ist, dass ich eine Eigenschaft im Fenster Eigenschaften von Visual Studio verfügbar machen kann, die es mir ermöglicht, individuelle Schriftarten für jede Registerkarte im benutzerdefinierten Registerkartensteuerelement zu definieren. Hier ist ein kurzer Blick auf die Klassendefinition:Eine Eigenschaft der Typenliste freilegen <class> In VS Designer Zugriff auf Elemente begrenzen oder ausblenden oder Eigenschaft als erweiterbares Menü anzeigen?
[ToolboxItem(true)]
public partial class CustomTabControl : System.Windows.Forms.TabControl
speichern jeden einzelnen Namen/font Paar I eine verschachtelte Klasse in CustomTabControl erstellt:
[TypeConverter(typeof(TabFontConverter))]
public class TabFont
{
public string Name { get; set; }
public Font Font { get; set; }
public TabFont()
{
}
public TabFont(string name, Font font)
{
this.Name = name;
this.Font = font;
}
}
(Beachten Sie die Verwendung des Typeconverter Eigenschaft über der TabFont-Klasse hinzugefügt, weil ich online gelesen habe, dass dies erforderlich war, wenn ich diesen Typ im Visual Studio Designer enthüllen würde.)
Hier ist die Konverterklasse (die auch verschachtelt ist) innen CustomTabControl):
public class TabFontConverter : TypeConverter
{
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] filter)
{
return TypeDescriptor.GetProperties(value, filter);
}
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
{
return true;
}
}
ich eine Klassenvariable definiert die benutzerdefinierten Registerkarte Schriftarten als Liste zu speichern:
private List<TabFont> _CustomTabFonts = new List<TabFont>();
diese Liste zu füllen, habe ich ein Event-Handler für ControlAdded:
Hier ist, wie ich die Liste im Ereignishandler auffüllen:
private void CustomTabControl_ControlAdded(object sender, ControlEventArgs e)
{
if (e.Control.GetType() == typeof(TabPage))
{
TabPage newTabPage = (TabPage)e.Control;
Font newTabPageFont = newTabPage.Font;
_CustomTabFonts.Add(new TabFont(newTabPage.Text, newTabPageFont));
e.Control.Font = newTabPageFont;
}
}
Und schließlich binden sie alle bis ich den folgenden Code definiert das Visual Studio-Designer für den Zugriff/ändern die benutzerdefinierte Registerkarte Schriftenliste erlaubt:
[DefaultValue(typeof(List<TabFont>))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public List<TabFont> CustomTabFonts
{
get { return _CustomTabFonts; }
set { _CustomTabFonts = value; }
}
Nach Wiederaufbau schalte ich zurück in die Visual Studio-Entwurfsansicht , habe ein CustomTabControl zu meinem Hauptformular hinzugefügt, indem ich eines aus der Toolbox gezogen habe. Dann habe ich 2 Registerkarten mit den Namen "Tab 1" und "Tab 2" hinzugefügt.
Dies ist, was die Eigenschaften zeigt für meine benutzerdefinierte Registerkarte Schriftarten Feld Eigenschaft:
Beachten Sie, dass es die Art, wie eine Sammlung zeigt und stellt eine Schaltfläche [...] für die Bearbeitung klicken. Wenn ich auf die Schaltfläche klicken Sie hier ist, was ich sehe:
ich ein paar Fragen bezüglich der Eigenschaftseditor haben.
Die rechte Seite des Eigenschaftseditor zeigt sowohl die Schriftart und Namen für die ausgewählten Registerkarte. Ich möchte nur die Schriftart, nicht den Namen ändern können. Wie kann ich das Namensfeld entweder verstecken oder es zumindest nur lesen lassen?(Ich würde das Namensfeld bevorzugen, um es überhaupt nicht anzuzeigen , weil ich nicht in der Lage sein will, es zu ändern, und es ist auch redundant , weil die Namen bereits auf der linken Seite der Eigenschaft Editor angezeigt werden.)
Die linke Seite des Eigenschaftseditors zeigt die Liste der Register, die genau ist, was ich will. Ich möchte jedoch nicht zulassen, zu verschieben, hinzuzufügen oder eines dieser Elemente zu entfernen. Wie kann ich die Move (hoch/runter Pfeile) und Hinzufügen/Entfernen Tasten entweder verstecken oder deaktivieren?
Die linke Seite des Eigenschafteneditors hat eine Überschrift namens "Mitglieder". Kann ich das ändern, um zu sagen, was ich will? So etwas wie "Registerkarten", etc.
Die rechte Seite des Eigenschaftseditors hat eine Überschrift mit dem Namen "Misc". Can ändere ich das auch?
Vielen Dank.
Jan
____UPDATE____
Wenn es eine bessere/andere Art und Weise zu tun, was ich versuche ich, für alle Vorschläge offen bin zu tun. Ich bin neu und das, was ich bisher gemacht habe, basiert auf verschiedenen Ergebnissen von verschiedenen Websites.
Ich würde wirklich gerne meine Eigenschaft im Designer ähnlich wie die Margen angezeigt werden. Anstelle eines Popup-Fensters mit einer Liste von Registerkarten/Eigenschaften möchte ich eine erweiterbare Liste, wobei jedes Listenelement der Name der Registerkarte ist, gefolgt von der Schriftart, auf die Sie klicken können, um nur die Schriftart zu bearbeiten. Etwas wie folgt aus: