2010-01-14 2 views
1

다음과 같은 문제가 있습니다. 바닥에 도킹 된 패널과 일부 버튼이있는 패널이있는 기본 폼이 있습니다. 이 기본 폼을 상속하는 폼은 자식 폼 속성에 나타나는 "ButtonCloseVisiblity"와 같은 속성에 의해 기본 폼 단추의 표시 여부를 수정할 수 있습니다. 문제는 자식 폼이 새로 고침 될 때 (예 : 이벤트를 두 번 클릭하고 새로 만든 이벤트를 코드에서 삭제 한 다음 디자이너로 돌아갈 때) 버튼의 가시성이 다시 기본 상태로 설정되는 경우입니다.C#의 폼 상속

+2

영어로도 좋습니다. – DOK

답변

1

코드에 유지되지 않고 가시성이 기본 폼에 의해 정의되므로 자식 폼을 열거 나 프로젝트를 다시 빌드 할 때마다 상속 된 컨트롤의 가시성이 기본적으로 기본 폼 값으로 설정됩니다. 이 문제를 해결하려면 필드를 추가하고 해당 값을 속성에서 변경해야합니다.

private bool _controlVisibility; 

public bool ControlVisibility 
{ 
    get{ return _controlVisibility; } 
    set 
    { 
     _controlVisibility = value; 
     control.Visibility = value; 
    } 
} 

이렇게하면 속성이 코드에서 유지됩니다.

0

상속 된 폼을 사용했지만 컨트롤을 사용하지 않았습니다.

이미 사용해 보신 경우 죄송합니다.

기본 클래스의 다양한 이벤트에 디버그 메시지를 넣으십시오. 디자인 모드에서 설정을 다시 적용 할 수있는 발사가 하나있을 수 있습니다.

2

이것은 기본 속성에서 속성이 누락 된 경우가 대부분입니다. this MSDN page, 특히 DesignerSerializationVisibilityAttribute을 살펴보십시오.

0

예 Visual Studio에서 매우 자주 발생합니다. 자식 폼 생성자에서 변경 내용을 유지하거나 OnLoad()에서 변경하십시오. 디자인 모드에서 변경 내용을 하위 폼에 표시하지 않으려면 다음 체크 인을 추가 할 수도 있습니다.

if(!DesignMode){ 
    .... 
    } 
0

내가 완전히 이해한다면 확실하지 않지만 가시성 속성을 덮어 쓰면 그 값이 그럴 것 같니? 디자이너 파일에서이 값을 수동으로 변경하면 다음에 디자이너 파일을 새로 고칠 때 (예 : 새 컨트롤을 추가 할 때) 값을 덮어 씁니다.

디자이너 파일에 수동으로 작성하는 대신 속성 탭에서 값을 설정해보십시오.

+0

속성 탭에서 속성을 변경하지만 항상 덮어 씁니다. – Argons

0

VS에서 WinForms/컨트롤의 시각적 요소에 대한 상속은 그다지 크지 않거나 안정적이지 않습니다. 사라지거나 재 배열 된 컨트롤 또는 덮어 쓰기 된 속성은 정상적인 것 같습니다.

문제를 조사 할 때 MS의 대응책은 제대로 구현하기에 너무 어려웠고 해결할 계획이 없다고 생각되었습니다. 나는 많은 것들이 진정한 상속이 아니라 자식 컨트롤 내의 코드 생성에 의존한다고 생각한다.

사실, DesignMode는 폼에서 직접 컨트롤에 대해서는 OK이지만, 폼에 대한 컨트롤이나 더 깊은 계층 구조를 갖고 있다면 신뢰할 수 없습니다. 저는 작년 어느 시점에이 문제에 관한 게시물이나 답변을 작성했습니다.

public bool ControlVisibility 
{ 
    get{ return control.Visibility; } 
    set{ control.Visibility = value; } 
} 

자식 형태로 수정하는 경우, 이러한 수정 :이 와서 대답, 내가 /처럼 직접 컨트롤에서 속성을 설정받을 기본 형태와 사용 특성을 가지고 파고