2012-03-16 9 views
5

Zgodnie z MSDN (http://msdn.microsoft.com/en-us/library/system.windows.forms.label.autosize.aspx), istnieje wzmianka o Label „s AutoSize nieruchomości:Jak ustawić domyślne wartości właściwości czasu projektu?

Po dodaniu do formularza przy użyciu projektanta, wartość domyślna to prawda. Po utworzeniu z kodu, domyślną wartością jest false.

Pytanie brzmi: jak mogę nadpisać kontrolę Label i ustawić czas projektowania domyślną wartość swojego AutoSize nieruchomość do false?

(Update)

I to nie działa:

class MyLabel : Label 
{ 
    const bool defaultAutoSize = false; 

    public MyLabel() 
    { 
     AutoSize = defaultAutoSize; 
    } 

    [DefaultValue(defaultAutoSize)] 
    public override bool AutoSize 
    { 
     get 
     { 
      return base.AutoSize; 
     } 
     set 
     { 
      base.AutoSize = value; 
     } 
    } 
} 

Odpowiedz

4

Kontrola Label ma atrybut:

[ToolboxItem("System.Windows.Forms.Design.AutoSizeToolboxItem,System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] 

które powodują dziwne AutoSize problem.

mogę wyłączyć go w ten sposób:

[ToolboxItem(true)] 
class MyLabel : Label 
{ 
} 
+0

Nie mogę tego teraz przetestować na moim końcu, ale wezmę na to twoje słowo, że rozwiązuje twój problem. :) Lubię to! – rfmodulator

2

Zobacz DefaultValueAttribute

tak:

public class MyLabel : Label 
{ 
    [System.ComponentModel.DefaultValue(false)] 
    public override bool AutoSize 
    { 
     get 
     { 
      return base.AutoSize; 
     } 
     set 
     { 
      base.AutoSize = value; 
     } 
    } 
} 

EDIT: To nie działa zgodnie z oczekiwaniami. Odpowiedź Tunga jest poprawna. ... Źle znowu.

+0

Nie, to nie zadziała. Spróbuj sam. – EFanZh

+0

@EfanZh Pewnie, że ... z jakim problemem się spotykasz? – rfmodulator

+0

Jeśli przeciągniesz kontrolkę z przybornika, Windows Form Designer automatycznie wygeneruje kod "AutoSize = true". – EFanZh

6

Po prostu użyj dziedziczenia. Będziesz jednak musiał użyć swojej niestandardowej etykiety zamiast Systemowej.

public class MyLabel:Label 
{ 
    public MyLabel():base() 
    { 
     base.AutoSize = false; 
    } 
} 

Możesz umieścić to bezpośrednio w swoim kodzie i zmodyfikować kod jak poniżej. Lub możesz umieścić tę klasę we własnej bibliotece, którą powinieneś wtedy załadować do zestawu narzędzi i użyć jak każdego innego składnika.

Aby to działało z przybornika, wydaje się, że trzeba zastąpić InitLayout, jak poniżej, i dodać atrybut do właściwości autoSize więc nie jest w odcinkach do autora:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    [DefaultValue(false)] 
    public override bool AutoSize 
    { 
     get 
     { 
      return base.AutoSize; 
     } 
     set 
     { 
      base.AutoSize = value; 
     } 
    } 

    protected override void InitLayout() 
    { 
     base.InitLayout(); 
     base.AutoSize = false; 
    } 

Jeśli nie używasz przybornik, a następnie raz upuścić normalne etykiety na formularzu, trzeba iść do [Form].Designer.cs i znaleźć i zmodyfikować swoje etykiety:

this.label1 = new MyLabel();// new System.Windows.Forms.Label(); 

//this.label1.AutoSize = true; 

trzeba usunąć zaprogramowaną właściwość autoSize bo kiedy upuść ustawioną etykietę s go w projektancie, a nawet jeśli zmienisz instancji etykiety być typ, podręcznik zestaw AutoSize zastąpi domyślny

+0

To również nie działa. Spróbuj sam. – EFanZh

+0

Po prostu to zrobiłem. Zaktualizuję mój kod, aby pokazać, jak to ma zostać wdrożone. –

+0

Ummm, jest to literówka w komentarzu, ponieważ normalna wartość domyślna to prawda. Zatem domyślne ustawienie to false jest tym, o co prosiłeś ... –

Powiązane problemy