2012-10-12 15 views
7

Jak ustawić domyślne właściwości niestandardowych elementów sterujących, tj. Kiedy są one po raz pierwszy przeciągane do formularza w Projektancie?C# WinForms niestandardowe właściwości sterowania niestandardowego

Nie można znaleźć odpowiedzi tutaj lub za pośrednictwem Google; wszystko, co dostaję, to jak ograniczyć wartości.

Korzystanie z szerokości & Wysokość jako przykłady, jeśli ustawię je w konstruktorze, zostaną one zastosowane do formantu przy każdym otwarciu Projektanta. Jak ustawić je na wartość domyślną, która nigdy nie zostanie zastosowana ponownie po zmianie właściwości przez użytkownika?

+0

Czy możesz podać przykład zastosowania tego do właściwości klasy podstawowej? –

+0

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

+0

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

Odpowiedz

-1

W konstruktorze ustaw wartości właściwości, które mają się pojawiać po przeciągnięciu na płótno. Jeśli są wbudowanymi właściwościami podstawowego kontrolera, ustaw je w klasie kodu projektanta.

+1

Ustawienie właściwości w konstruktorze powoduje, że są one stosowane za każdym razem, gdy projektant jest otwierany, co oznacza, że ​​nie można ich ustawić. –

-1

Poniższe umożliwia dodanie wartości podczas wyświetlania formularza, po czym można ustawić go, jak chcesz.

private int widthLength = 5; 

public int Width {  

    get { return widthLength ; } 
    set { widthLength = value; 
} 
+1

Stosując to, domyślne właściwości nie zostaną zastosowane, gdy formant zostanie przeciągnięty na formularz w Projektancie. Dostaję również ostrzeżenie kompilatora, że ​​ukrywa on odziedziczony element; dodanie "nowego" zgodnie z instrukcją ostrzeżenia nie zmienia zachowania. –

5

Spróbuj użyć atrybutu DefaultValue.

private int height; 

[DefaultValue(50)] 
public int Height 
{ 
    get 
    { 
     return height; 
    } 
    set 
    { 
     height=value; 
    } 
} 
+1

To nie działa, ponieważ właściwość klasy podstawowej dla wysokości nie jest przez nią nadpisywana. –

2

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.

Powiązane problemy