Problem z przeciążaniem Text

Powiedzmy, że chcę mieć nową kontrolkę. Dziedziczę z np. klasy Panel i piszę

[Kod C#]
[Browsable(true)]
/// <summary>
/// Text to display
/// </summary>
public new string Text
{
get { return _text; }
set { if (_text != value) { _text = value; Invalidate(); } }
}

wrzucam z Toolbara tą nową kontrolkę z właściwością Text. Można teraz edytować pole Text we właściwościach kontrolki w czasie projektowania.
Ale właściwość Text nie jest serializowana do InitializeComponents.

Jak się okazało, ludzie radzą, aby dodać jeszcze jeden atrybut:

[Kod C#]
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
/// <summary>
/// Text to display
/// </summary>
public new string Text
{
get { return _text; }
set { if (_text != value) { _text = value; Invalidate(); } }
}

Atrybut DesignerSerializationVisibility określa jak ma być serializowana właściwość. Wydawałoby się, że teraz właściwość powinna działać dobrze.
Ale niestety tak nie jest. Zachowanie jest nadal to samo: można ustawić właściwość, ale nie jest ona zapisywana do InitializeComponents czyli za pierwszym
razem kiedy Visual Studio będzie serializowało właściwości klasy, właściwość Text zostanie porzucona.

Kilka wątków na ten temat na różnych forach albo kończy się rozwiązaniem powyższym, które wygląda na to, że czasem wystarczy (możliwe, że
został dodany inny atrybut, który powoduje poprawne zachowanie tej właściwości). Moje próby znalezenia takiej właściwości zakończyły się
niestety niepowodzeniem.

Porzuciłem już nadzieję na to, żeby zachować normalne nazewnictwo tej właściwości, dodałem jeszcze tylko z ciekawości jeden atrybut:

Czytaj podobne  Narzędzia programistyczne cz. 2
[Kod C#]
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[DefaultValue(“”)]
/// <summary>
/// Text to display
/// </summary>
public new string Text
{
get { return _text; }
set { if (_text != value) { _text = value; Invalidate(); } }
}

No i okazało się, że dodanie atrybutu DefaultValue powoduje, że serializacja działa już normalnie.
Może ktoś jest w stanie wyjaśnić, dlaczego po dodaniu DefaultValue serializacja  w tym bardzo szczególnym wypadku działa dobrze?

Przeczytaj też

Najlepsza książka do Pythona Nie wiesz, z jakiej książki/ebooka uczyć się programowania w języku Python? Postanowiłem zrobić zestawienie 10 książek z Heliona na ten temat, abyś mó...
Komplet 28 ebooków i kursów, aby zostać programist... Od jakiegoś czasu dostaję zapytania na temat tego jakie książki, kursy i ebooki polecam. W związku z tym postanowiłem przygotować dzisiaj zestaw, któr...
120 tapet programistycznych za darmo do pobrania Trochę mi się nudziło, więc przygotowałem zestaw 120 tapet dla programistów. Możesz go pobrać. Tapety są w rozdzielczości 1366x768. Podzielone ...
10 fiszek do nauki programowania w Pythonie Uczysz się programowania w Pythonie? Pobierz te 10 fiszek, które ułatwią Ci zapamiętanie funkcji wbudowanych* w Pythona! Programowanie potrafi ...
Napisano w Kolumna Tagi: , , , , , , , , , , , , ,

Menu