2012-01-24 4 views
8

클래스에서 구성 요소 디자이너를 사용하지 않도록 설정하려면 [System.ComponentModel.DesignerCategory ("")] 특성을 추가하는 것이 간단하지만 모든 클래스에서 작동하지 않습니다 모든 세대에서이 클래스에서 파생됩니다. 예 :다음 세대의 파생 클래스에서 디자이너를 사용하지 않도록 설정하는 방법

[System.ComponentModel.DesignerCategory("")] 
public class A:ServiceBase { } //Designer is disabled here 

public class B:A {} //Designer is enabled here 

[System.ComponentModel.DesignerCategory("")] 
public class B:A {} //Designer is enabled here too 

[System.ComponentModel.DesignerCategory("Code")] 
public class B:A {} //Designer is enabled even here 

이것은 물론 다른 세대 및 순열에서 발생합니다. 예 :

//Whatever attribute here 
public class C:B {} //Designer is enabled here 

아무도 그걸 없애려고합니까? 구성 요소 모델이 1 세대에서 명시 적으로 작동하지 않는 경우에도 디자이너 지원을 추가하려고하는 이유는 무엇입니까?

고맙습니다.

+0

이러한 클래스가 어떤 어셈블리에 살고 있으며 솔루션의 일부인지 여부는 매우 분명하지 않습니다. 도구 상자의 자동 입력 설정이 우선합니다. –

+0

이것은 언급이 아닙니다. 동일한 어셈블리에서 fbase 클래스와 파생 클래스가 같거나 다른 어셈블리 비헤이비어에 있습니다. 기본 클래스 (ServiceBase에서 직접 파생 된 기본 클래스에만 디자이너가 없습니다.) – Tamir

답변

7

이러한 동작의 이유는 캐시 된 참조 된 어셈블리입니다. 이를 해결하려면 특성이있는 어셈블리 포함 된 기본 서버에 대한 참조를 제거하고 다시 추가하십시오. 이 경우 Visual Studio는 프로젝트를 다시 빌드하고 기본 편집기를 derrived 클래스로 정의하지 않습니다.

+2

동일한 문제가 있으며이 문제가 해결되었습니다. 내 기본 클래스는 System.ComponentModel.Component에서 파생되었으며'System'에 대한 참조를 제거한 다음 다시 추가해야했습니다. 이제 모든 파생 클래스가 기본적으로 코드 편집기로 열립니다. 감사! – Ove

+0

그건 속임수 였어! 감사! –

0

"속성 상속"은 처음에는 속성이 상속되지 않는다고 항상 생각했기 때문에 이상하게 여겼습니다. 나 또한

:-) 내 지식을 확대 돕는 당신 덕분에, 그래서 나는 또한 <SubType>Component</SubType>의 무리를 제거했다, 속성 Inherited = true이있을 수 있습니다 - docs.microsoft.com 확인 후 나는 그런 경우가 될 필요가 없습니다 것을 발견 .csproj 파일의 항목