2012-04-04 4 views
1

기본 클래스와 파생 클래스 (아래 설명 참조) 및 단일 속성 "TestProperty"가 있습니다. 내 목표는 intializecomponent 내부에서 serialize되도록 testproperty에 설정 한 값을 가져 오는 것입니다. 나중에 매우 중요하기 때문에 디자인 타임에이 속성의 새 값에 액세스 할 기본 클래스가 필요하며 intializecomponent에 값이 설정되어 있지 않으면이 새 클래스에 대한 액세스 권한이 없습니다. 기본 값 "잘 (그러나, 나는 defaultvalue 속성이이 경우 관련이 있다고 생각하지 않습니다).파생 클래스가 initializecomponent에 작성된 속성을 강제 적용합니다.

아래의 경우 디자이너에서 "파생 된"열어 속성을 새 값으로 수동으로 설정하면 내 속성을 직렬화 할 수있는 유일한 방법입니다.

나는 맞춤형 코드화 합성기가 해결책이 될 것이라고 염려하지만, 나는 그것을 피하려고 애 쓰고있다. 가능한 "적은"코드를 "기본"싶습니다.

디자이너에서 편집하여 내 속성을 initializecomponent에 끼워 넣을 수있는 방법 (코드에서 가져올 수있는 위치로 설정)은 어떻게 얻을 수 있습니까?

public partial class Base : Form 
    { 
     public Base() 
     { 
     InitializeComponent(); 
     TestProperty = "set in the base class"; 
     } 
     [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 
     public string TestProperty 
     { 
     get; 
     set; 
     } 
    } 

그리고 간단한 파생 클래스

public partial class Derived : Base 
    { 
     public Derived() 
     { 
     InitializeComponent(); 
     this.TestProperty = "i want to be packed into initializecomponent somehow"; 
     } 
    } 

내가 뭐하는 거지 할 노력하고있어 이유에 좀 더 정보를 제공합니다.

내 문제는 디자이너에서 "파생"을 열 때 "editableproperty"라는 속성을 편집하는 데 사용되는 사용자 정의 editorcontrol bieng이 있습니다. EditableProperty는이 경우 TestProperty에 액세스해야합니다. 런타임에는 아무런 문제가 없습니다. 유형으로 파생 된 모든 기능과 아무런 문제가 없습니다.

문제는 내가 사용하고있는 EditorControl이 다른 어셈블리에 있고 그 이유는 무엇입니까 (파생 된 어셈블리가 아닌 다른 어셈블리에서 생각하기 때문에) 새 값을로드하지 않기 때문입니다. 파생 된의 생성자.

기본적으로 디자이너에서 파생 된 열고 사용자 지정 편집기를 사용하려고하면 "기본 클래스에서"TestProperty 값으로 가져옵니다. 내 editorcontrol이 값을보기 위해서 TestProperty를 initializecomponent에 설정해야합니다.

+0

직접 설정하려는 경우 InitializeComponent에 직접 값을 쓰지 않아도됩니다. 이 새로운 "기본 값"에 액세스 할 수는 없지만 사실 파생 된 (파생 된 다른 형식을 파생시키는 포함) 사용은 해당 값을 포함합니다. 어쩌면 당신이 성취하고자하는 것에 대해 더 설명 할 수 있다면, 그것은 당신에게 더 나은 대답을 줄 수 있습니다. –

+0

나는 (잘) 내가 뭘하려고하는지 잘 설명하도록 질문을 편집했다. – greggorob64

답변

1

양식 디자이너가 파생 된 인스턴스를 만들지 않습니다. Base의 인스턴스를 만든 다음 Derived에서 InitializeComponent 메서드를 호출하고 있습니다. 그래서 당신이 설정하고있는 속성의 새로운 가치가 디자이너에 의해 선택되지 않습니다.

생성자에서 설정하는 대신 디자이너에서 파생 된 속성의 값을 설정하면됩니다. 그러면 InitializeComponent에서 속성의 새 값이 유지되고 디자인 타임에 표시됩니다.

+0

내가 그렇게 할 수 있다면. 연습의 요점은 코드에서 수행하는 것입니다. 속성 파생에서 설정하려고하는 프로젝트에서 파생 된 * .settings 파일에서 가져오고 있어요. – greggorob64

+0

글쎄, 그건 다르다. 디자이너에서 선택한 양식을 사용하여 특성 창을보십시오. 첫 번째 줄 "(ApplicationSettings)"을 참조 하시겠습니까? 이를 사용하여 TestProperty와 설정간에 바인딩을 만들 수 있습니다.응용 프로그램 설정이 아닌 경우 다음 줄 "(DataBindings)"을 사용하여 바인딩을 만들 수 있습니다. 설정 파일을 래핑하는 강력한 형식의 클래스를 참조하는 Object 데이터 소스를 만들어야합니다. –

+0

나는 그것을 시도해 보겠다. 나는 다음과 같은 문제를 예상하고있다 : 기본 클래스와 에디터 클래스는 어셈블리 "A"에 있고, 설정 파일은 어셈블리 "B"에있다. 그게 문제가 될까요? – greggorob64