2010-02-10 9 views
0

.NET의 무거운 사용자 지정 속성 디자이너의 초기화를 피하거나 제어하는 ​​가장 좋은 방법은 무엇입니까? 때로 초기 설정시 해당 설정을 적용하지 않고 초기에 속성을 설정하는 것이 중요합니다.사용자 지정 속성 기본값 및 .NET 디자이너

아래 가상의 예제에서 UpdateSetting을 속성으로 사용할 수있는 유연성을 얻고 싶지만 응용 프로그램이 시작될 때마다 데이터베이스를 0으로 설정하는 불편 함을 피하고자합니다. 내가 생각할 수있는 것은 깃발을 열 수있는 또 다른 속성입니다.

public class A : UserControl 
{ 
    public int UpdateSetting 
    { 
    // Write to database or some such thing 
    } 

... 

    public void InitializeComponent() 
    { 
    A a = new A(); 
    a.UpdateSetting = 0; // Causes database write 
    } 
} 

답변

1

당신이 구성 요소 (는 A 클래스), "이 부동산에 대한 세터를 생성하지 않는다"라고하는 숨겨진 옵션으로, 고가의 속성에 DesignerSerializationVisibilityAttribute 적용을 제어하는 ​​가정 : 다시 읽으면 디자이너가 초기화를하지 못하게 할 것인지, 선택 사항으로 만들 것인지, 아니면 디자이너를 통해 수행 할 수 있는지 여부는 확실하지 않지만 초기화의 실제 실행을 지연해야합니다.이 시나리오 중 첫 번째 시나리오 만 처리합니다. .)

+0

예, 저는 옵션으로 촬영하고 있었지만 회상 해보면 아마 잘 될 것입니다. – Nicholas

1
[Default(0)] 
public int UpdateSetting 
{ 
    get { /*...*/} 
    set {/* Write to database or some such thing... */ } 
} 

이는 처음에 디자이너의 0을 표시 할 것 (당신이 그것을 변경 한 후 0으로 다시 설정하면 굵은 글씨로 보여) 코드의 모든 실제로 설정 것도없이.

public class A : UserControl 
{ 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public int UpdateSetting 
    { 
    // Write to database or some such thing 
    } 
} 

(편집 :

+2

http://stackoverflow.com/questions/2290746/what-namespace-is-the-default-attribute-for-properties-on-usercontr ols/2290768 # 2290768 잘못된 속성 이름이 있다고 생각합니다. –

관련 문제