Utworzono niestandardowy element sterujący tabulacją dla mojej aplikacji systemu Windows. Niestandardowa kontrolka tabulatora rozciąga się na System.Windows.Forms.TabControl. Powodem, dla którego utworzyłem niestandardowy element sterujący tabulatorem, jest możliwość wyeksponowania właściwości w oknie Właściwości okna programu Visual Studio, która pozwala mi definiować indywidualne czcionki dla każdej strony karty w formancie zakładki niestandardowej. Oto krótkie spojrzenie na definicję klasy:Wystawienie właściwości listy typów <class> W VS Designer Ograniczanie/ukrywanie dostępu do członków lub wyświetlanie właściwości jako menu rozwijane?
[ToolboxItem(true)]
public partial class CustomTabControl : System.Windows.Forms.TabControl
do przechowywania każdej indywidualnej pary nazwa/font stworzyłem zagnieżdżone klasy wewnątrz CustomTabControl:
[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;
}
}
(Uwaga korzystanie z TypeConverter nieruchomości powyżej klasy TabFont. Dodałem to, ponieważ gdzieś czytałem w Internecie, że było to wymagane, jeśli mam zamiar ujawnić ten typ w projektancie Visual Studio.)
Oto klasa konwertera (która jest również zagnieżdżona wewnątrz 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;
}
}
I zdefiniowano klasę zmiennej do przechowywania czcionek niestandardowej karcie postaci listy:
private List<TabFont> _CustomTabFonts = new List<TabFont>();
do wypełnienia tej listy dodałem obsługi zdarzenia dla ControlAdded:
this.ControlAdded += new ControlEventHandler(CustomTabControl_ControlAdded);
Oto jak zapełniam listę wewnątrz obsługi zdarzeń:
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;
}
}
I wreszcie związać to wszystko ja zdefiniowany następujący kod pozwalający Studio projektant wizualne do dostępu/zmodyfikować listę czcionek Zakładka zwyczaj:
[DefaultValue(typeof(List<TabFont>))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public List<TabFont> CustomTabFonts
{
get { return _CustomTabFonts; }
set { _CustomTabFonts = value; }
}
Po przebudowie I powrócić do Visual Studio widoku projektu , dodałem CustomTabControl do mojego głównego formularza, przeciągając go z Toolbox., a następnie dodałem 2 strony z zakładkami o nazwie "Tab 1" i "Tab 2".
To właśnie właściwości box pokazy dla mojego niestandardowej właściwości czcionek zakładka:
Zauważ, że to pokazuje typ jako zbiór i dostarcza przycisk [...], aby kliknąć na edycji. Po kliknięciu przycisku oto co widzę:
Mam kilka pytań dotyczących edytora własności.
Po prawej stronie edytora własności pokazuje zarówno czcionki i Nazwisko dla wybranej zakładki. Chcę tylko zmienić czcionkę, a nie nazwę. Jak mogę ukryć pole nazwy lub przynajmniej uczynić je tylko do odczytu?(Wolałbym, aby pole nazwy nie było tam wyświetlane w ogóle, ponieważ nie chcę go zmieniać, a także jest nadmiarowe , ponieważ nazwy są już widoczne po lewej stronie edytora właściwości .)
Lewa strona edytora właściwości pokazuje listę zakładek, która jest dokładnie taka, jak chcę. Nie chcę jednak pozwolić na przenoszenie, dodawanie, dodawanie, lub usuwanie któregokolwiek z tych elementów. Jak mogę ukryć lub dezaktywować przyciski Przenieś (strzałki w górę/w dół) i Dodaj/Usuń?
Lewa strona edytora właściwości zawiera nagłówek "Członkowie". Czy mogę to zmienić, aby powiedzieć, co chcę? Coś jak "Zakładki", itd.
Prawa strona edytora właściwości zawiera nagłówek "Różne". Czy mogę to zmienić?
Dziękuję bardzo.
Jan
____UPDATE____
Jeśli jest lepiej/inny sposób robi to, co próbuję zrobić, jestem otwarty na wszelkie sugestie. Jestem na to nowy i to, co do tej pory zrobiłem, opiera się na różnych wynikach z różnych stron internetowych.
Bardzo chciałbym, aby moja własność pojawiła się w projektancie w podobny sposób, jak pokazano marginesy. Zamiast okna wyskakującego z listą stron/właściwości karty chciałbym rozwinąć listę z każdym elementem listy będącym nazwą karty, po której następuje czcionka, którą można następnie kliknąć, aby edytować tylko czcionkę. Coś jak następuje: