Co pracował dla mnie właściwości, które nie mogą zmienić się za pomocą operatora new
. Na przykład właściwość MultiSelect
na formancie ListView
. Chcę MultiSelect
domyślnie ustawić na false
, ale nadal chcę móc to zmienić.
Gdybym tylko ustawić go false
w konstruktorze lub w InitializeComponent
problem (chyba) jest to, że wartość domyślna to nadal true
, więc jeśli ustawić wartość true
w projektancie, zawiadomieniach projektant że Domyślną wartością jest true
, dlatego po prostu nie ustawia ona wcale właściwości, a nie jawnie ustawia ją na domyślną. Ale wtedy wartość kończy się jako false
, ponieważ jest to ustawione w konstruktorze.
Aby obejść ten problem kiedyś następujący kod:
/// <summary>Custom ListView.</summary>
public sealed partial class DetailsListView : ListView
{
...
[DefaultValue(false)]
public new bool MultiSelect {
get { return base.MultiSelect; }
set { base.MultiSelect = value; }
}
ten pozwala na sterowanie do jeszcze funkcjonującego MultiSelect
właściwość, że domyślnie false
zamiast true
i nieruchomości nadal można włączać nowa kontrola.
EDYCJA: Napotkałem problem związany z używaniem abstrakcyjnych formularzy. Korzystam z klas abstrakcyjnych formularzy, z konkretną implementacją, do której przełączam się, gdy potrzebuję korzystać z projektanta. Zauważyłem, że kiedy zmieniłem klasę, z której dziedziczyłem, właściwości na moim kontrolerze niestandardowym zresetowałyby się do starych wartości domyślnych. Wydaje się, że poprawiłem to zachowanie, ustawiając właściwości na ich wartości domyślne w konstruktorze niestandardowego formantu.
Czy możesz podać przykład zastosowania tego do właściwości klasy podstawowej? –
Przeprosiny - to "[DefaultValue (someValue)]". Oto link do MSDN na tym przykładzie: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute%28v=vs.90%29.aspx – Bridge
Myślę, że atrybut DefaultValue jest tym, co Ty potrzeba. Visual Studio IDE umieści domyślną wartość określoną w atrybucie w pliku Designer. Jeśli użytkownik zmieni domyślną wartość na inną wartość, Visual Studio IDE zaktualizuje plik Designer o nową wartość. Zapobiegnie to ponownemu wczytaniu poprzedniej wartości, gdy kontrola zostanie ponownie otwarta, ponieważ wartość domyślna została już nadpisana. – jags